422B测试成功

网友投稿 710 2022-11-08

422B测试成功

422B测试成功

#include "stc8a8k.h"#include #include "stdlib.h"#include "stdarg.h"#include "string.h" //str函数#include "intrins.h"//22.1184Mhz;#define DataIn P7#define DataOut P2sbit WCK =P1^5;sbit WEN =P1^4;sbit WRST =P1^3;sbit OE =P1^2;sbit RRST =P1^1;sbit RCK =P1^0;//一共8个数据unsigned char tablecode[200];//****************************************************************#define Uart1_Rec_Maxlength 100unsigned char Global_Uart1_Rec[Uart1_Rec_Maxlength];//串口1接收空间,100个字节#define Uart1_END_CODE '#' //帧尾自定义符号unsigned char Uart1_Rec_Byte_Length=0;//动态长度,在0-最大Uart1_Rec_Maxlength=100之间unsigned char Uart1_Rec_Frame_Flag=0;//接收一帧标记,=1,接收到一帧数据,=0,没有接受一帧数据unsigned char Global_uart1cmdnum=0;//串口接收到的命令号//************************void UartInit(void); //115200bps@11.0592MHzvoid UART1_SendData(char dat);void UartSendStr(char *p);void Clear_Uart1_Rxbuff(void);//打开写使能和写时钟//P0不断发送数据0x12 0x34 0x56 0x78 0x9A 0xBC 0xDE//打开接收使能和接收时钟;//然后将数据放到P2口;//关闭接收使能//将数据放入数组中;//将数据发送到串口中,打印出来;//打开写时钟,继续输出。void Delay1us() //@22.1184MHz{ unsigned char i; i = 6; while (--i);}void Delay5ms() //@22.1184MHz{ unsigned char i, j; i = 144; j = 157; do { while (--j); } while (--i);}void Delay1ms() //@22.1184MHz{ unsigned char i, j; i = 29; j = 183; do { while (--j); } while (--i);}void Delay5us() //@22.1184MHz{ unsigned char i; i = 35; while (--i);}void ResetWRST_AL422B(void);void ResetRRST_AL422B(void);//初始化脉冲void InitAL422B(){ Delay1ms(); ResetWRST_AL422B(); ResetRRST_AL422B(); Delay1ms();}//复位,低电平复位void ResetWRST_AL422B(void){ ///WRST Write Reset Input: //This reset signal initializes the write address to 0, and is fetched at the //rising edge of the WCK input cycle. WEN=0;_nop_();_nop_(); _nop_(); WRST=1; _nop_(); _nop_(); WRST=0; _nop_(); _nop_();_nop_(); _nop_(); WCK=0;_nop_(); _nop_();_nop_(); WCK=1;_nop_();_nop_();_nop_(); WCK=0;_nop_(); _nop_();_nop_(); WRST=1; _nop_(); _nop_(); _nop_();_nop_(); WEN=1;_nop_();_nop_(); _nop_();}//复位,低电平复位//RRST Write Reset Input: //This reset signal initializes the read address to 0, and is fetched at the//rising edge of the RCK input cyclevoid ResetRRST_AL422B(void){ OE=0; _nop_();_nop_(); _nop_(); RRST=1; _nop_(); _nop_(); RRST=0; _nop_(); _nop_(); RCK=0; _nop_(); _nop_(); RCK=1; _nop_();_nop_(); RCK=0; _nop_(); _nop_(); RRST=1; _nop_();_nop_(); OE=1; _nop_();_nop_(); _nop_();}//DI7~DI0 Data Input: //Data is input on the rising edge of the cycle of WCK when /WE is pulled low(enabled).///WE Write Enable Input: /WE controls the enabling/disabling of the data input. When /WE is//pulled low, input data is acquired at the rising edge of the WCK cycle. When /WE is pulled high, the//memory does not accept data input. The write address pointer is stopped at the current position.///WE signal is fetched at the rising edge of the WCK cycle.void WriteAL422B( unsigned char temp){ char i; _nop_();_nop_() ; WEN=0;_nop_();_nop_() ; DataIn = temp;//P0 _nop_();_nop_() ; WCK=0;_nop_(); _nop_();_nop_() ; WCK=1;_nop_(); _nop_();_nop_() ;//上升沿,写入数据 WCK=0;_nop_(); _nop_();_nop_() ; WEN=1;_nop_();_nop_();_nop_(); }unsigned char ReadAL422B(){ unsigned char temp=0x00; char i=0; OE=0;_nop_();_nop_();_nop_();_nop_(); temp=DataOut; RCK=0;_nop_();_nop_();_nop_();_nop_(); RCK=1;_nop_();_nop_();_nop_();_nop_(); OE=1; _nop_();_nop_();_nop_();_nop_(); return temp;}void Delay500ms() //@22.1184MHz{ unsigned char i, j, k; i = 57; j = 27; k = 112; do { do { while (--k); } while (--j); } while (--i);}void main(){ int i=0; unsigned char ReadVal=0; P0M0=0x00; P0M1=0x00; P1M0=0x00; P1M1=0x00; P2M0=0x00; P2M1=0x00; P3M0=0x00; P3M1=0x00; P4M0=0x00; P4M1=0x00; P5M0=0x00; P5M1=0x00; P6M0=0x00; P6M1=0x00; P7M0=0x00; P7M1=0x00; Delay5ms(); Delay5ms(); Delay5ms(); UartInit();//串口1,波特率115200,定时器2产生,stc8a8k,22.1184Mhz Delay5ms(); ES = 1; EA = 1; P17=0; Delay500ms(); P17=1; Delay500ms(); P17=0; Delay500ms(); P17=1; Delay5ms(); UART1_SendData(0x89);//串口发送 InitAL422B();//初始化AL422B Delay5ms();//第一次读写测试 ResetWRST_AL422B();//复位写信号,从头开始写进去数据 WriteAL422B(0x90) ; //写0x85 WriteAL422B(0x9a) ; //写0x8e Delay1us(); Delay1us(); ResetRRST_AL422B();//复位读信号, tablecode[0]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[0]);//串口发送ReadVal=ReadAL422B();//读一个数据, tablecode[1]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[1]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(0x0D); UART1_SendData(0x0A); // while(P43==1);//等待按键松开// Delay500ms();Delay500ms();Delay500ms();//第2次读写测试// InitAL422B();//初始化AL422B// Delay5ms(); ResetWRST_AL422B();//复位写信号,从头开始写进去数据 WriteAL422B(0x80) ; _nop_();_nop_() ; WriteAL422B(0x81) ; _nop_();_nop_() ; WriteAL422B(0x82) ; _nop_();_nop_() ; WriteAL422B(0xaa) ;_nop_();_nop_() ;// WriteAL422B(0x84) ; _nop_();_nop_() ; WriteAL422B(0x85) ; _nop_();_nop_() ; WriteAL422B(0x86) ; _nop_();_nop_() ; WriteAL422B(0xbb) ;_nop_();_nop_() ;//变成了D7,有时候0x17,为什么 WriteAL422B(0x88) ; _nop_();_nop_() ; WriteAL422B(0x89) ; _nop_();_nop_() ; WriteAL422B(0x8a) ; _nop_();_nop_() ; WriteAL422B(0x8b) ;_nop_();_nop_() ;//变成了D7,有时候0x17,为什么 WriteAL422B(0x90) ; _nop_();_nop_() ; WriteAL422B(0x91) ; _nop_();_nop_() ; WriteAL422B(0x92) ; _nop_();_nop_() ; WriteAL422B(0x93) ;_nop_();_nop_() ;// WriteAL422B(0x94) ; _nop_();_nop_() ; WriteAL422B(0x95) ; _nop_();_nop_() ; WriteAL422B(0x96) ; _nop_();_nop_() ; WriteAL422B(0x97) ;_nop_();_nop_() ;//变成了D7,有时候0x17,为什么 WriteAL422B(0x98) ; _nop_();_nop_() ; WriteAL422B(0x99) ; _nop_();_nop_() ; WriteAL422B(0x9a) ; _nop_();_nop_() ; WriteAL422B(0x9b) ;_nop_();_nop_() ;//变成了D7,有时候0x17,为什么 //cd 8c---cd cd //cd 4a---cd cd //ec 8c---ec ec //ec 4a---ec ec// Delay1us(); ResetRRST_AL422B();//复位读信号, tablecode[0]=ReadAL422B();//读一个数据, tablecode[1]=ReadAL422B();//读一个数据, tablecode[2]=ReadAL422B();//读一个数据, tablecode[3]=ReadAL422B();//读一个数据, tablecode[4]=ReadAL422B();//读一个数据, tablecode[5]=ReadAL422B();//读一个数据, tablecode[6]=ReadAL422B();//读一个数据, tablecode[7]=ReadAL422B();//读一个数据, tablecode[8]=ReadAL422B();//读一个数据, tablecode[9]=ReadAL422B();//读一个数据, tablecode[10]=ReadAL422B();//读一个数据, tablecode[11]=ReadAL422B();//读一个数据, tablecode[12]=ReadAL422B();//读一个数据, tablecode[13]=ReadAL422B();//读一个数据, tablecode[14]=ReadAL422B();//读一个数据, tablecode[15]=ReadAL422B();//读一个数据, tablecode[16]=ReadAL422B();//读一个数据, tablecode[17]=ReadAL422B();//读一个数据, tablecode[18]=ReadAL422B();//读一个数据, tablecode[19]=ReadAL422B();//读一个数据, tablecode[20]=ReadAL422B();//读一个数据, tablecode[21]=ReadAL422B();//读一个数据, tablecode[22]=ReadAL422B();//读一个数据, tablecode[23]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[0]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[1]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[2]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[3]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[4]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[5]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[6]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[7]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[8]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[9]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[10]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[11]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[12]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[13]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[14]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[15]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[16]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[17]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[18]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[19]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[20]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[21]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[22]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(tablecode[23]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(0x0D); UART1_SendData(0x0A); while(P43==1);//等待按键松开 Delay500ms();Delay500ms();Delay500ms(); UART1_SendData(0x0D);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(0x0A);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(0x88);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(0x99);//串口发送ReadVal=ReadAL422B();//读一个数据, while(P43==1);//等待按键松开 Delay500ms();Delay500ms();Delay500ms(); ResetWRST_AL422B(); WriteAL422B(0x10) ; WriteAL422B(0x11) ; WriteAL422B(0x12) ; WriteAL422B(0x13) ; WriteAL422B(0x14) ; WriteAL422B(0x15) ; WriteAL422B(0x16) ; WriteAL422B(0x17) ; WriteAL422B(0x18) ; WriteAL422B(0x19) ; // // WriteAL422B(0x10) ; // WriteAL422B(0x11) ; // WriteAL422B(0x12) ; // WriteAL422B(0x13) ; // WriteAL422B(0x14) ; // WriteAL422B(0x15) ;// WriteAL422B(0x16) ; // WriteAL422B(0x17) ; // WriteAL422B(0x18) ; // WriteAL422B(0x19) ; // // // WriteAL422B(0x10) ; // WriteAL422B(0x11) ; // WriteAL422B(0x12) ; // WriteAL422B(0x13) ; // WriteAL422B(0x14) ; // WriteAL422B(0x15) ;// WriteAL422B(0x16) ; // WriteAL422B(0x17) ; // WriteAL422B(0x18) ; // WriteAL422B(0x19) ; // // // WriteAL422B(0x10) ; // WriteAL422B(0x11) ; // WriteAL422B(0x12) ; // WriteAL422B(0x13) ; // WriteAL422B(0x14) ; // WriteAL422B(0x15) ;// WriteAL422B(0x16) ; // WriteAL422B(0x17) ; // WriteAL422B(0x18) ; // WriteAL422B(0x19) ; // // // WriteAL422B(0x10) ; // WriteAL422B(0x11) ; // WriteAL422B(0x12) ; // WriteAL422B(0x13) ; // WriteAL422B(0x14) ; // WriteAL422B(0x15) ;// WriteAL422B(0x16) ; // WriteAL422B(0x17) ; // WriteAL422B(0x18) ; // WriteAL422B(0x19) ; Delay1us();Delay1us(); ResetRRST_AL422B(); Delay1us(); for(i=0;i<10;i++) { tablecode[i]=ReadAL422B();//读一个数据, } UART1_SendData(0xbb); UART1_SendData(0xaa); for(i=0;i<10;i++) { UART1_SendData(tablecode[i]);//串口发送ReadVal=ReadAL422B();//读一个数据, } UART1_SendData(0x0D); UART1_SendData(0x0A); while(1) { }}串口1,波特率115200,定时器2产生,void UartInit(void) //115200bps@22.1184Mhz{ SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x01; //串口1选择定时器2为波特率发生器 AUXR &= 0xFB; //定时器2时钟为Fosc/12,即12T T2L = 0xFC; //设定定时初值 T2H = 0xFF; //设定定时初值 //IE2 = ET2; AUXR |= 0x10; //启动定时器2 TI=0; }//void UartInit(void) //115200bps@27.000MHz//{// SCON = 0x50; //8位数据,可变波特率// AUXR |= 0x01; //串口1选择定时器2为波特率发生器// AUXR |= 0x04; //定时器时钟1T模式// T2L = 0xC5; //设置定时初始值// T2H = 0xFF; //设置定时初始值// AUXR |= 0x10; //定时器2开始计时// TI=0;//}//UART1 发送串口数据,一个字节void UART1_SendData(unsigned char dat) { ES=0; //关串口中断 SBUF=dat; while(TI!=1); //等待发送成功 TI=0; //清除发送中断标志 ES=1; //开串口中断}//UART1 发送串口数据,字符串void UartSendStr(char *p){ while (*p) { UART1_SendData(*p++); }}//重写putchar函数,可以用printf函数char putchar(char c){ UART1_SendData(c); return c;}//串口1中断服务函数void Uart1Isr() interrupt 4 using 1{ unsigned char cmdtemp=0; if (TI) { TI = 0; } if (RI) {RI = 0; Global_Uart1_Rec[Uart1_Rec_Byte_Length]=SBUF;//将数据放到缓冲区中 Uart1_Rec_Byte_Length++;//递增,不断放到数组中 if(Uart1_Rec_Byte_Length>Uart1_Rec_Maxlength-1) Uart1_Rec_Byte_Length=0; }}//清除串口1的内存void Clear_Uart1_Rxbuff(void){ unsigned char *p,i; p=Global_Uart1_Rec; for(i=0;i

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【Tools】Typora 1.2.4安装教程详解
下一篇:shell bash let 加减乘除/自增/自减
相关文章

 发表评论

暂时没有评论,来抢沙发吧~