单片机流水灯程序程序,求大神

还没有帐号? 赶紧
用户版块帖子
跪求大神帮忙编写一51单片机的小程序。
UID:1437856
在线时间1062小时
M币2263专家1
此帖悬赏结束最佳答案:200&M币,最佳答案获得者:elecfun
前几天参加了一个焊接比赛,谁知道焊接完以后要求写程序。我参加的是焊接比赛啊,我不会写程序啊。自己看来几本书,但是还是不会,眼看晚上12点就要交了,只好求助各位大神帮忙了。原理图如图所示想要实现按下p2.3的微动开始显示 p2.2 结束 p2.1 暂停 p2.0 重新显示数码管显示内容为 “Love CDUT ”如果可以的话,加上一点注释,不胜感激!
UID:38583
在线时间991小时
M币164专家12
最佳答案奖励:+200&M币
之前重装了系统,刚专门装了Proteus和Keil写了个,仿真可以用,不知道是不是你要的效果。有问题的话提出来再帮你改。
注: 00:22:38重新编辑,1、50行添加注释。2、删除原82行无用变量state。3、更新111行的错误,逻辑与为“||”//For http://bbs.mydigit.cn/read.php?tid=1908778//想要实现按下p2.3的微动开始显示 p2.2 结束 p2.1 暂停 p2.0 重新显示//数码管显示内容为 “Love CDUT ”//elecfun @
00:22:07#include &AT89x51.h&#define PORT_KEY&&&&&&&&P2&&&&&&//按键端口#define KEY_START&&&&&& 0x08&&&&//开始显示#define KEY_STOP&&&&&&&&0x04&&&&//结束#define KEY_PAUSE&&&&&& 0x02&&&&//暂停#define KEY_RESET&&&&&& 0x01&&&&//重新显示#define KEY_MASK&&&&&&&&(KEY_START | KEY_STOP | KEY_PAUSE | KEY_RESET)//共阳显示数组unsigned char code SEG[]={&&&&0xC0, /*0*/&&&&0xF9, /*1*/&&&&0xA4, /*2*/&&&&0xB0, /*3*/&&&&0x99, /*4*/&&&&0x92, /*5*/&&&&0x82, /*6*/&&&&0xF8, /*7*/&&&&0x80, /*8*/&&&&0x90, /*9*/&&&&0x88, /*A 10*/&&&&0x83, /*b 11*/&&&&0xC6, /*C 12*/&&&&0xA1, /*d 13*/&&&&0x86, /*E 14*/&&&&0x8E, /*F 15*/&&&&0xC7, /*L 16*/&&&&0xC0, /*O 17*/&&&&0xCE, /*T 18*/&&&&0xC1, /*U 19*/&&&&0xE3, /*v 20*/&&&&0xFF, /*&&21*/};//字符串数组,21表示空格,不需要可删除//&&&&&&&&&&&&&&&&&&&&&&&&L&&o&&v&&e&&&& C&&D&&U&&T&&&& 1 9 5 6&&&&2 0 1 6unsigned char code Str[]={16,17,20,14,21,12,13,19,18,21,1,9,5,6,21,2,0,1,6,21,21};//全局状态枚举enum STATE{&&&&STOP = 0,&&&&PAUSE,&&&&START,}gS //状态机,指示当前状态//用于按键检测全局变量unsigned char KeyOne=0,KeyAll=0;//短延时void Delay(unsigned int t){&&&&unsigned int a,b;&&&&for (a=0; a&t; a++)&&&&{&&&&&&&&for (b=0; b&123; b++)&&&&&&&&{&&&&&&&&&&&&;&&&&&&&&}&&&&}}/* 读取按键值 */void GetKey(void){&&&&unsigned char ReadD&&&&PORT_KEY |= KEY_MASK;&&&&&&&&&& //如果按键无上拉电阻,则读按键前必须先写1&&&&ReadData = PORT_KEY ^ 0xFF;&&&& //读数据&&&&ReadData &= KEY_MASK;&&&&&&&&&& //保留有效位&&&&KeyOne = ReadData & (ReadData ^ KeyAll);&&&&KeyAll = ReadD}void main(void){&&&&unsigned char&&&&&&&&&&&&&&&&//当前显示的字符指针&&&&unsigned int&&&&&&&&&&&& //字符流动速度控制&&&&&&&&gState = STOP;&&&&&&&&&&&&&&&&&&//默认为停止状态&&&&p = 0;&&&&&&&&&&&&&&&&&&&&&&&&&&//默认显示第一个字符&&&&while(1)&&&&{&&&&&&&&GetKey();&&&&&&&&&&&&&&&&&& //读取按键状态,非阻塞模式&&&&&&&&if (KeyOne & KEY_START)&&&& //开始按键&&&&&&&&{&&&&&&&&&&&&gState = START;&&&&&&&& //更新当前状态为开始状态&&&&&&&&}&&&&&&&&if (KeyOne & KEY_STOP)&&&&&&//停止按键&&&&&&&&{&&&&&&&&&&&&gState = STOP;&&&&&&&&&&//更新当前状态为停止状态&&&&&&&&&&&&p = 0;&&&&&&&&&&&&&&&&&&//字符指针复位&&&&&&&&&&&&count = 0;&&&&&&&&&&&&&&//流速计数清零&&&&&&&&}&&&&&&&&if (KeyOne & KEY_PAUSE)&&&& //暂停按键&&&&&&&&{&&&&&&&&&&&&if (gState == START)&&&&//如果当前是开始状态,则更改为暂停状态&&&&&&&&&&&&{&&&&&&&&&&&&&&&&gState = PAUSE;&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&}&&&&&&&&if (KeyOne & KEY_RESET)&&&& //重新显示按键&&&&&&&&{&&&&&&&&&&&&if ( (gState == START) || (gState == PAUSE)) //开始或停止状态下才可以重新显示&&&&&&&&&&&&{&&&&&&&&&&&&&&&&gState = START;&&&& //更新当前状态为开始状态&&&&&&&&&&&&&&&&p = 0;&&&&&&&&&&&&&&//字符指针复位&&&&&&&&&&&&&&&&count = 0;&&&&&&&&&&//流速计数清零&&&&&&&&&&&&}&&&&&&&&}&&&&&&&&&&&&&&&&switch (gState)&&&&&&&&&&&& //状态机,根据当前不同状态进行不同的处理&&&&&&&&{&&&&&&&&case STOP:&&&&&&&&&&&&&&&&&&//停止状态&&&&&&&&&&&&P0 = SEG[21];&&&&&&&&&& //显示空白&&&&&&&&&&&&break;&&&&&&&&case PAUSE:&&&&&&&&&&&&&&&& //暂停状态&&&&&&&&&&&&P0 = SEG[Str[p]];&&&&&& //一直显示当前的字符&&&&&&&&&&&&break;&&&&&&&&case START:&&&&&&&&&&&&&&&& //开始状态&&&&&&&&&&&&if (++count & 100)&&&&&&//字符流速控制,更改数字大小可控制字符流动速度&&&&&&&&&&&&{&&&&&&&&&&&&&&&&count = 0;&&&&&&&&&&//计满后清零以便重新计数&&&&&&&&&&&&&&&&if (++p &= sizeof(Str)) //指向字符串数组中的下一个字符,到头重新开始&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&p = 0;&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&&&&&P0 = SEG[Str[p]];&&&&&& //显示当前当前指针指向的字符&&&&&&&&&&&&break;&&&&&&&&}&&&&&&&&&&&&&&&&Delay(10);&&&&&&&&&&&&&&&&&&//短延时调整时序,可防止按键误检测,count过大&&&&}} [ 此帖被elecfun在 00:24重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请
后查看;或者
成为会员获得更多权限
UID:1229025
在线时间808小时
M币93专家5
热心助人奖励:+1&M币
数码管那么多吗?
UID:1575778
在线时间50小时
M币1021专家-1
热心助人奖励:+1&M币
哪估计不行,你在执行显示函数的时候,是不能扫描按键的,也就不可能实现你说的暂停或者其他,除非你接中断引脚。
UID:1575778
在线时间50小时
M币1021专家-1
回 wu 的帖子
热心助人奖励:+1&M币
:大写吧 o可以和d一样 v就写成 f b d显示 T就写成7就可以了 是那么个意思就好。谢谢啦! ( 21:22) 额。。。我还在写论文,明天早上赶着交。我尽力而为,要是哪位大神有空先帮他写下。我只能说尽量不敢保证。
UID:38583
在线时间991小时
M币164专家12
热心助人奖励:+1&M币
百度盘下载
UID:1437856
在线时间1062小时
M币2263专家1
占楼 字数补丁原理图
本文内容包含图片或附件,获取更多资讯,请
后查看;或者
成为会员获得更多权限
UID:1437856
在线时间1062小时
M币2263专家1
回 xxdz12345 的帖子
:数码管那么多吗?&( 19:55)&只有一个数码管 一个一个字符的循环显示
UID:1437856
在线时间1062小时
M币2263专家1
回 256 的帖子
:哪估计不行,你在执行显示函数的时候,是不能扫描按键的,也就不可能实现你说的暂停或者其他,除非你接中断引脚。&( 20:42)&那就按p2.3 开始 其他没功能,这样呢?
UID:1575778
在线时间50小时
M币1021专家-1
回 wu 的帖子
:那就按p2.3 开始 其他没功能,这样呢? ( 20:48) 还有就是你这字母要大写还是、大写的话,O跟D,U跟V要怎么处理?
访问内容超出本站范围,不能确定是否安全
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
您目前还是游客,请
&回复后跳转到最后一页
Code by , Time now is:04-14 21:40, Total 0.240735(s) query 9,
Gzip enabled&单片机程序,求大神_百度知道
单片机程序,求大神
单片机简易数字时钟的单片机程序,要汇编语言的,不要c语言的。
我有更好的答案
 时钟显示复位&&&32H;&&P1.0,CLEAR&&0000HAJMP&MAIN&&&&&&&&&&&&&&//&&;&nbsp,31H&&&&&&&&&&&&//;&&&&IP,#20H//数码管动态显示LED6:&&&&&&LCALL&&DISPLAY&&&&&&JNB&TMOD,#02H&&&&&&&&&&&&&&&//&;&& 定时器启动&&&&&&MOV& 跳转到主程序&&&&MOV&31H,#0&&&&&&MOV&P1.0,CLEAR&&;T0中断入口AJMP&PTF0&&&&&&&&&&&&&&&&&&&//&; 调节分加1&&B键&&&&&&CJNE&A,#59H;&&&&&&&&&&MOV&30H,#12H&&&&&&&&&&&&&&//,#6&&LED6SET_MINUTE:&&&&&&LCALL&P1.1,SET_MINUTE&&&&&&JNB&MOV&TH0,#6&&&&&&SETB&TR0&&//;判断键盘输入&&&&&&JNB&nbsp,#0A0H&&&&&&MOV&&&&&&&&&&DISPLAY&&&&&&JNB&DISPLAY&&&&&&JNB&TL0;&&&& &MOV&31H,#0&&&&&&MOV&&&ORG&000BH&&&P1.1,SET_MINUTE&&&&&&MOV&&&&&&&&&&//&&&&&&&&A键& 缓冲单元设置初值12:00,MIN&&&&&&MOV&31H,#0&&&&&&SJMP&LED6SET_HOUR:&&&&&&LCALL&DISPLAY&&&&&&JNB&P1.2,SET_HOUR&&&&&&MOV&R1,#30H&&&&&&&&&&//;调节时加1&&&C键&&&&&&MOV&A,@R1&&&&&&CJNE&A,#23H,HOUR&&&&//&比较立即数和A,不相等则转移&&&&&&MOV&30H,#0MIN:&&&&&&&&ADD&A&,#1&&&//将1加到累加器&&&&&&DA&A&&&&&//&累加器十进制调整&&&&&&MOV&31H,A&&&&&&LCALL&DELAY1&&&&&&AJMP&LED6HOUR:&&&&&&&ADD&A,#1&&&&&&DA&A&&&&&&MOV&30H,A&&&&&&LCALL&DELAY1&&&&&&AJMP&LED6DISPLAY:&&&&&&MOV&DPTR,#TAB&&&&//;表的首地址给16位数据指针寄存器DPTR&&&&&&MOV&A,30H&&&&&&&&&&&//&;时为的十位显示&&&&&&SWAP&A&&//&A的高四位和低四位互换&&&&&&ANL&A,#0FH&&&&&//&&A与相与&&&&&&MOVC&A,@A+DPTR&&&&//&程序存储器代码字节传送到累加器&&&&&&MOV&P2,#7FH&&&&&&MOV&P0,A&&&&&&LCALL&DELAY&&&&&//调用延时子程序&&&&&&MOV&A,30H&&&&&&&&&&&//&&;时位的个位显示&&&&&&ANL&A,#0FH&&&&&&MOVC&A,@A+DPTR&&&&&&MOV&P2,#0BFH &&JB&00H,DIS01 &&ORL&A,#80HDIS01:&&&&&&MOV&P0,A&&&&&&LCALL&DELAY&&&&&&MOV&A,31H&&&&&&&&&&&&&&//&;分位的十位显示&&&&&&SWAP&A&&&&&&ANL&A,#0FH&&&&&&MOVC&A,@A+DPTR&&&&&&MOV&P2,#0EFH&&&&&&MOV&P0,A&&&&&&LCALL&DELAY&&&&&&MOV&A,31H&&&&&&&&&&&&&&&&//;分位的个位显示&&&&&&ANL&A,#0FH&&&&&&MOVC&A,@A+DPTR&&&&&&MOV&P2,#0F7H &&JB&00H,DIS02 &&ORL&A,#80HDIS02:&&&&&&MOV&P0,A&&&&&&LCALL&DELAY&&&&&&MOV&A,32H&&&&&&&&&&&&&&&&//&;秒位的十位显示&&&&&&SWAP&A&&&&&&ANL&A,#0FH&&&&&&MOVC&A,@A+DPTR&&&&&&MOV&P2,#0FDH&&&&&&MOV&P0,A&&&&&&LCALL&DELAY&&&&&&MOV&A,32H&&&&&&&&&&&&&&&&&&&&//;秒位的个位显示&&&&&&ANL&A,#0FH&&&&&&MOVC&A,@A+DPTR&&&&&&MOV&P2,#0FEH&&&&&&MOV&P0,A&&&&&&LCALL&DELAY &&RET//中断程序PTF0:&&&&&&PUSH&PSW&&&&&&&&&&&&&&&&&&&&&&;中断处理&&&&&&PUSH&ACC&&&&&&MOV&PSW,#8&&&&&&DJNZ&37H,PTF0R&&&&&&DJNZ&36H,PTF0R&&&&&&MOV&36H,#0FH&&&&&&MOV&37H,#0A0H&&&&&&MOV&R0,#32H&&&&&&&&&&&&&&&&&&&&&//;定时到一秒&&&&&&MOV&A,@R0&&&&&&ADD&A,#1&&&&&&DA&A&&&&&&MOV&@R0,A &&CPL&00H&&&&&&CJNE&A,#60H,PTF0R&&&&&&&&&&&&&&&&&&&&MOV&@R0,0&&&&&&DEC&R0&&&&&&MOV&A,@R0&&&&&&ADD&A,#1&&&&&&DA&A&&&&&&MOV&@R0,A&&&&&&CJNE&A,#60H,PTF0R&&&&&&MOV&&@R0,#0&&&&&&DEC&R0&&&&&&MOV&A,@R0&&&&&&ADD&A,#1&&&&&&DA&A&&&&&&MOV&@R0,A&&&&&&CJNE&A,#24H,PTF0R&&&&&&MOV&@R0,#0PTF0R:&&&&&&POP&ACC&&&&//&保护现场&&&&&&POP&PSW&&&&&&RETI&&&//&&中断返回DELAY:&&&&&&MOV&R6,#10&&&&&&&&&&&&&&&&&//;动态显示延时L0:&&&&&&&&&MOV&R7,#250&&&&&&&&&&&&DJNZ&R7,$&&&&&&DJNZ&R6,L0&&&&&//&&寄存器减一,不为0则转移&&&&&&RET&&&&//&&子程序返回DELAY1:&&&&&&MOV&R5,#1BH&&&&&&&&&&&&&&&//;调整时、分显示延时L1:&&&&&&MOV&R6,#9HL2:&&&&&&MOV&R7,#19H&&&&&&DJNZ&R7,$&&&&&&DJNZ&R6,L2&&&&&&DJNZ&R5,L1&&&&&&RET&//数码显示表TAB:&&DB&3FH,06H,5BH,4FH,66H&&&&&//&&;&0,1,2,3,4&&&&&&&&&&&DB&6DH,7DH,07H,7FH,6FH&&&&&//&;&&5,6,7,8,9&&&&&&END;&&nbsp,#0&//&&&&&SJMP&MOV&30H,#0&&&&&&&&&&&&&//&;&&37H;SP,#05FH 中断处理首地址&&//主程序MAIN:&&&&&&MOV&&&32H;&&&&A;&&&&P1.2,SET_HOUR&&&&&&AJMP&LED6CLEAR:&&&&&&LCALL&&&&&&nbsp:00&启动T0计时器&&&&&&MOV&nbsp,#0&IE,#82H&&&&&&MOV&MOV&36H,#0FH&&&&&&&&&&//&&&&&;&设置4000次中断计数&&&&&&MOV&&&&&nbspORG&nbsp
我是四个数码管的,你这是四个的吗,还是八个的
高级工程师
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。求程序图,求大神_51单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:57,827贴子:
求程序图,求大神收藏
//实例7#include &reg51.h&//led字模char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};//键值char key_buf[] = {0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82,
0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};char getKey(void);void delay(unsigned int time){ unsigned int j = 0;for(;time&0;time--)
for(j=0;j&125;j++);}void main(void) {char key = 0;P2 = 0x00; while(1) {
key = getKey();if (key != -1) {P2 = led_mod[key];}delay(10);}}//检测按键//返回-1表示没有检测到按键按下char getKey(void) {char k1 = 0, k2 = 0, i = 0;P3 = 0xf0;delay(10);if (P3 != 0xf0) {k1 = P3; delay(10);if (P3 == k1) {P3 = 0x0f;delay(10);k2 =
P3 & k1;for (i = 0 ; i & 16 ; i++) {if (key_buf[i] == k2) {}}}}return -1;}
登录百度帐号求一个大神写程序【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:147,354贴子:
求一个大神写程序收藏
哥,你的这个是8字型数码管,显示不了字符的,得用LCD
字符的数码管才行的。
数码管显示有些字母很丑
“T”怎么显示
字符显示不了
可以查下资料自己搞定,如有单片机开发问题可交流。
专业从事单片机开发的生产,具有高品质的研发团队和设备,产品高品质保证,10年生产开发经验.
免费要吗?十一之前弄出来
点阵可以满足你
登录百度帐号查看: 822|回复: 3
单片机写一个modbus程序 没有任何要求 modbus没有任何要求 但是我不知道怎么下手 求大神教教我
主题帖子精华
初级会员, 积分 159, 距离下一级还需 41 积分
在线时间0 小时
我串口已经配置好了 现在想写一个modbus的程序 学习任务 明天给,求大神教教我 我学了半个月的单片机·· 用库函数的呢
先看看协议格式吧,简单了解一下,对你的串口传输数据加一个格式要求而已。把要传输的数据分成保持寄存器和输入寄存器,功能码的功能按照协议里介绍,写对应的处理函数,用到几个写几个,最后再加上CRC校验就可以了。-------我也只是简单用过。
主题帖子精华
中级会员, 积分 353, 距离下一级还需 147 积分
在线时间99 小时
先看看协议格式吧,简单了解一下,对你的串口传输数据加一个格式要求而已。把要传输的数据分成保持寄存器和输入寄存器,功能码的功能按照协议里介绍,写对应的处理函数,用到几个写几个,最后再加上CRC校验就可以了。-------我也只是简单用过。
主题帖子精华
新手入门, 积分 42, 距离下一级还需 -22 积分
在线时间7 小时
#include&usart.h&
#include&key.h&
#include&port.h&
#include&crc.h&
#include&exti.h&
#include&eeprom.h&
/*****************************************************
通讯协议采用MODBUS_RTU&通讯协议&
波特率1200
数据位8位
停止位1位
CRC校验
*****************************************************/
//#define&baud&95&&&&&&&&&&&&&&&//波特率&1200&&异步正常模式&计算公式&BAUD(波特率)=Fosc/16(UBBR0+1)&误差为0.0%
uchar&uart_
uchar&RxdBuffer[8];
uchar&UartTxdBuffer[6];
uchar&pRxdInput=0;
uchar&rv_over=0;
uchar&tx_addr=0x01;
uchar&LERR;
uchar&UartSendCounter=0;
uint&&crc_tx&=0;&
uint&&crc_rx&=&0;
uchar&crc_h,crc_l;
uchar&data_addr&=&0;
uchar&write_data&=&0;
//BAUD=()(系统时钟为晶振时钟2分频)/16(95+1)=1200
void&Uart_Init(void)
{
UCSR0B&=&0x00;&//disable&while&setting&baud&rate
UCSR0A=0B;
UCSR0C=0B;
UBRR0L&=&bps_1200;
UBRR0H&=&0x00;&//set&baud&rate&hi
UCSR0B=0B&;
// &&tx_over_flag&=&1;
}
uint&CRC16(uchar&*pchMsg,uchar&wDataLen)&&&&&//CRC16&校验
{&&&&&&&&&
uchar&wI&&&&&&&&&//&CRC&循环中的索引
uchar&chCRCHi&=&0&//&&高&CRC&字节初始化
uchar&chCRCLo&=&0&//&&低&CRC&字节初始化
while&(wDataLen--)
wIndex&=&chCRCLo&^&*pchMsg++&;
chCRCLo&=&chCRCHi&^&chCRCHTalbe[wIndex];&
chCRCHi&=&chCRCLTalbe[wIndex];
pchMsg&=&0;&&&&&&&&&&&&&&//指针复位
return&(((uint)chCRCHi)&&&8)|chCRCLo;&&&&&//高低字节合并返回
}
interrupt&[USART_RXC]&void&&uart0_rx_isr(void)&&&&&//发送一个数据&产生一个中断
{&&
&//MOSBUS——RTU协议读取数据
ri_flag&=&1;
//
tx_over_flag&=&0;
//
rx_flag&=&1;
data&=&UDR0;
RxdBuffer[pRxdInput]=
pRxdInput++;&&
}
void&Usart_Data_Judge(void)
{
tx_addr&=&eeprom_readbyte(2);
delay_us(5);
if((&RxdBuffer[0]&!=&tx_addr)&&(pRxdInput==1))
pRxdInput&=&0;
RxdBuffer[0]=0;
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;
if((RxdBuffer[1]&!=&0x03)&&(RxdBuffer[1]&!=&0x06)&&(pRxdInput==2))
pRxdInput&=&0;
RxdBuffer[0]=0;
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;&&
if(RxdBuffer[1]&==&0x03)
data_addr&=&0x01;
write_addr_flag&=&0;
if(RxdBuffer[1]&==&0x06)
write_addr_flag&=&1;
data_addr&=&0x02;
if((&RxdBuffer[2]&!=&0x00&)&&(pRxdInput==3))
pRxdInput&=&0;
RxdBuffer[0]=0;&&
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;&
if((&RxdBuffer[3]&!=&data_addr&)&&(pRxdInput==4))
pRxdInput&=&0;
RxdBuffer[0]=0;&&
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;&
if((&RxdBuffer[4]&!=&0x00&)&&(pRxdInput==5))
pRxdInput&=&0;
RxdBuffer[0]=0;&&
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;&
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;
if(write_addr_flag&==&1)
if(((RxdBuffer[5]&99)||(RxdBuffer[5]&=0))&&(pRxdInput==6))
pRxdInput&=&0;
RxdBuffer[0]=0;&&
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;&
if(rv_over==0)
if(pRxdInput&7)
&&write_data&=&RxdBuffer[5];
crc_tx&=&CRC16(RxdBuffer,6);
crc_l=(uchar)crc_
crc_h=(uchar)(crc_tx&&8);
if((RxdBuffer[6]==crc_l)&&(RxdBuffer[7]==crc_h))
pRxdInput&=&0;
pRxdInput&=&0;
RxdBuffer[0]=0;&&
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;&
if((&RxdBuffer[5]&!=&0x01&)&&(pRxdInput==6))
pRxdInput&=&0;
RxdBuffer[0]=0;&&
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;&
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;
if(rv_over==0)
if(pRxdInput&7)
crc_tx&=&CRC16(RxdBuffer,6);
crc_l=(uchar)crc_
crc_h=(uchar)(crc_tx&&8);
if((RxdBuffer[6]==crc_l)&&(RxdBuffer[7]==crc_h))
pRxdInput&=&0;
pRxdInput&=&0;
RxdBuffer[0]=0;&&
RxdBuffer[1]=0;
RxdBuffer[2]=0;
RxdBuffer[3]=0;
RxdBuffer[4]=0;
RxdBuffer[5]=0;
RxdBuffer[6]=0;
RxdBuffer[7]=0;&
ri_flag&=&1;&
void&rece_data(void)
{
if(rv_over==0xaa)
if(write_addr_flag&==&1)
write_addr_flag&=&0;
eeprom_write(2,write_data);
delay_us(5);
UartTxdBuffer[0]&=&eeprom_readbyte(2); //读地址码
delay_us(5);
UartTxdBuffer[0]&=tx_
UartTxdBuffer[1]&=0x03;&
UartTxdBuffer[2]&=0x01;
LERR=l1_flag+(l2_flag&&1)+(l3_flag&&2)+(ef_flag&&3)+(bs_state_flag&&4);&&&&&//EF故障变量
&&&&&&&&&&&
UartTxdBuffer[3]&=LERR;
crc_rx&=&CRC16(UartTxdBuffer,4);&
UartTxdBuffer[4]&=(uchar)crc_
UartTxdBuffer[5]&=(uchar)(crc_rx&&8);&&&&&&&&&&&&&&&&&
UartSendCounter&=0;
rv_over=0x55;&&
void&get_data(void)
{
if(&rv_over==0x55)
if&(UartSendCounter&&&6)
while&(&!(&UCSR0A&&&0x20&));
UDR0&=&UartTxdBuffer[UartSendCounter];&//发送
UartSendCounter++;
&&&&&&&&&&&&&&//指向下一位&&&
if(UartSendCounter==6)
{&&&&&&&&&&&&&&&&&&&&&&&&&&//发完停上串口中断
UartTxdBuffer[0]=&0;
UartTxdBuffer[1]&=0;&
UartTxdBuffer[2]&=0;&&
UartTxdBuffer[3]&=0;&
UartTxdBuffer[4]&=0;&
UartTxdBuffer[5]&=0;&&&
LERR=0;&&&&&//EF故障变量
rv_over=0;&&&&&&&&&&&&
UartSendCounter&=0;
tx_over_flag&=1;&
//
uart_int_flag&=&0;
/*
if(system_state&==&STANDBY_STATE)
pd_flag&=&1;
TCCR0B&=&0x00;
TCNT0&=&0xf7;
pd_flag&=&0;
主题帖子精华
在线时间659 小时
送你一个“问问题大户”的战功
以我资质之鲁钝,当尽平心静气、循序渐进、稳扎稳打之力。
Powered by

我要回帖

更多关于 单片机串口通信程序 的文章

 

随机推荐