20220804-al422 test 01

网友投稿 239 2022-09-04

20220804-al422 test 01

#include "stc8a8k.h"#include #include "stdlib.h"#include "stdarg.h"#include "string.h" //str函数#include "intrins.h"//22.1184Mhz;#define DataIn P0#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(){ // WEN=1;// WRST =1;// OE=1;// RRST =1;// Delay1ms(); ResetWRST_AL422B(); ResetRRST_AL422B(); Delay1ms();}//复位,低电平复位void ResetWRST_AL422B(void){ WEN=0;//允许写操作 WCK=0; WRST =0; _nop_(); WCK=1; WRST=0; WCK=0; WRST=0; WCK=1; WRST=0; WCK=0; WRST=1; WEN=1;}//复位,低电平复位void ResetRRST_AL422B(void){ OE=0; RCK=0;_nop_(); RRST =0;_nop_(); RCK=1;_nop_(); RRST =0;_nop_(); RCK=0;_nop_(); RRST =0;_nop_(); RCK=1;_nop_(); RRST =0;_nop_(); RCK=0;_nop_(); RRST =1;_nop_(); OE=1;}void WriteAL422B(unsigned char temp){ char i; DataIn = temp;//P0 WRST=1; WEN=0;_nop_(); for(i=7;i>=0;i--) { WCK=0;_nop_(); WCK=1;_nop_();//上升沿,写入数据 WCK=0;_nop_(); } WEN=1;_nop_(); WCK=0;_nop_(); WCK=1;_nop_();//上升沿,写入数据 WCK=0;_nop_(); WCK=1;_nop_();//上升沿,写入数据 WCK=0;_nop_(); }unsigned char ReadAL422B(){ unsigned char temp=0x00; char i=0; OE=1; _nop_(); OE=0;_nop_(); for(i=7;i>=0;i--) { RCK=0;_nop_(); RCK=1;_nop_();//上升沿,写入数据 RCK=0;_nop_(); } OE=1; _nop_(); temp=DataOut;//P2 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=0xff; 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(); InitAL422B(); ES = 1; EA = 1; P17=0; Delay500ms(); P17=1; Delay500ms(); P17=0; Delay500ms(); P17=1; Delay5ms(); UART1_SendData(0x89);//串口发送 Delay5ms(); ResetWRST_AL422B(); WriteAL422B(0x85) ; WriteAL422B(0x8e) ; Delay1us(); Delay1us(); ResetRRST_AL422B(); tablecode[0]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[0]);//串口发送ReadVal=ReadAL422B();//读一个数据, tablecode[1]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[1]);//串口发送ReadVal=ReadAL422B();//读一个数据, ResetWRST_AL422B(); WriteAL422B(0x45) ; WriteAL422B(0x68) ; Delay1us(); Delay1us(); ResetRRST_AL422B(); tablecode[0]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[0]);//串口发送ReadVal=ReadAL422B();//读一个数据, tablecode[1]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[1]);//串口发送ReadVal=ReadAL422B();//读一个数据, WriteAL422B(0xb1) ; WriteAL422B(0xc8) ; Delay1us(); Delay1us(); Delay1us(); ResetRRST_AL422B(); tablecode[0]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[0]);//串口发送ReadVal=ReadAL422B();//读一个数据, tablecode[1]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[1]);//串口发送ReadVal=ReadAL422B();//读一个数据, tablecode[2]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[2]);//串口发送ReadVal=ReadAL422B();//读一个数据, tablecode[3]=ReadAL422B();//读一个数据, UART1_SendData(tablecode[3]);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(0x0D);//串口发送ReadVal=ReadAL422B();//读一个数据, UART1_SendData(0x0A);//串口发送ReadVal=ReadAL422B();//读一个数据, 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<50;i++) { tablecode[i]=ReadAL422B();//读一个数据, } UART1_SendData(0xbb); UART1_SendData(0xaa); for(i=0;i<50;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; }//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

问题 数据不对。 估计是硬件电路不对,需要在数据输出DO1-DO7加一个1K的上拉电阻和1K的下拉电阻。 需要补充电路,再次测试。

基本读复位,写复位,以及读写字节是对的。

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

上一篇:利用营销与用户共鸣,东鹏饮料的举措带给我们众多启示!(东鹏饮料赞助)
下一篇:汽车工况电量计算-转速扭矩图
相关文章

 发表评论

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