完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
串口通信:一主机(灯亮)控制 两片从机(数码管)求解释? 主机: #include #include #define uchar unsigned char #define uint unsigned int int begin=0;//当为0时表示对于接收到的数据丢弃,1表示接收的数据放到数组array中 ***it A1=P0^0;//LED灯 ***it A2=P0^1; ***it A3=P0^2; ***it A4=P0^3; unsigned char array[16];//数组 为什么是16 uchar temp; //定义临时变量 uchar t=0; //延时0.1S函数 void mDelay0(int utime) { int i,j,k; for(i=0;i { for(j=0;j<11;j++) { for(k=0;k<11;) k++; } } } void InitUART(void) { SCON = 0x50; TMOD |= 0x20; TH1 = 0xD0; //这里波特率是1200?为什么没有TL1? TR1 = 1; EA = 1; ES = 1; } /*------------------------------------------------ 发送一个字节 ------------------------------------------------*/ void SendByte(unsigned char dat) { SBUF = dat; while(!TI); TI = 0; } /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main() { uchar a1,a2,a3,a4,b1,b2,b3,b4; InitUART(); A1=0;A2=0;A3=0;A4=0; mDelay0(500);//不同的灯亮 A1=1;A2=1;A3=1;A4=1; mDelay0(10); A1=0;A2=0;A3=0;A4=0; mDelay0(10); while(1) { a1=array[0];// ??? a2=array[1];//??? a3=array[2];//???? a4=array[3];//?? if (array[0]==0x00)//??? { A1=0; } else { A1=1; } if (array[1]==0x00)??? { A2=0; } else { A2=1; } if (array[2]==0x00)??? { A3=0; } else { A3=1; } if (array[3]==0x00)??? { A4=0; } else { A4=1; } if(b1!=array[4])//?????? { b1=array[4];????? SendByte(0x01);mDelay0(1);//????? SendByte(b1);mDelay0(1); //???????? } if(b2!=array[6])//?????? { b2=array[6]; //???????? SendByte(0x02);mDelay0(1); //???????? SendByte(b2);mDelay0(1); //???????? } if(b3!=array[8]) //???????? { b3=array[8]; //???????? SendByte(0x03);mDelay0(1); //???????? SendByte(b3);mDelay0(1); //???????? } if(b4!=array[10]) //???????? { b4=array[10]; //???????? SendByte(0x04);mDelay0(1); //???????? SendByte(b4);mDelay0(1); //???????? } } } void UART_SER (void) interrupt 4 //串行中断服务程序 { if (RI) //从机没有发送数据,只有主机发送数据。这里接受的是主机发送的数据吗? { RI = 0; temp = SBUF; if ((temp == 0xc5) || (begin == 1))// ???????0xc5什么意思 { begin = 1; //什么作用? if(temp!=0xc5)//??? { array[t]=temp;//??? t++; if(t>=13) { begin=0;t=0; } //??? } } } } 丛机1: #include #include #define uchar unsigned char #define uint unsigned int ***it b1=P2^0; ***it b2=P2^1; ***it b3=P2^2; ***it b4=P2^3; uchar t=0; uchar Q1; int begin=0; void mDelay(int utime) { int i,j,k; for(i=0;i { for(j=0;j<5;j++) { for(k=0;k<99;) k++; } } } /*------------------------------------------------ 串口初始化 ------------------------------------------------*/ void InitUART (void) { SCON = 0x50; TMOD |= 0x20; TH1 = 0xD0; TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 //ES = 1; //打开串口中断 } void main (void) { int i; uchar a1,a2,a3; InitUART(); ES=1; while(1) { //90度 if(Q1==0x00) {a1=0x00;a2=0x3f;a3=0x8f;}// 0 if(Q1==0x01) {a1=0x00;a2=0x30;a3=0x8f;}// 1 if(Q1==0x02) {a1=0x00;a2=0x5b;a3=0x8f;}// 2 if(Q1==0x03) {a1=0x00;a2=0x79;a3=0x8f;}// 3 if(Q1==0x04) {a1=0x00;a2=0x74;a3=0x8f;}// 4 if(Q1==0x05) {a1=0x00;a2=0x6d;a3=0x8f;}// 5 if(Q1==0x06) {a1=0x00;a2=0x6f;a3=0x8f;}// 6 if(Q1==0x07) {a1=0x00;a2=0x38;a3=0x8f;}// 7 if(Q1==0x08) {a1=0x00;a2=0x7f;a3=0x8f;}// 8 if(Q1==0x09) {a1=0x00;a2=0x7d;a3=0x8f;}// 9 if(Q1==0x0a) {a1=0x06;a2=0x3f;a3=0x8f;}// 10 if(Q1==0x0b) {a1=0x06;a2=0x30;a3=0x8f;}// 11 if(Q1==0x0c) {a1=0x06;a2=0x5b;a3=0x8f;}// 12 if(Q1==0x0d) {a1=0x06;a2=0x79;a3=0x8f;}// 13 if(Q1==0x0e) {a1=0x06;a2=0x74;a3=0x8f;}// 14 if(Q1==0x0f) {a1=0x06;a2=0x6d;a3=0x8f;}// 15 if(Q1==0x10) {a1=0x06;a2=0x6f;a3=0x8f;}// 16 if(Q1==0x11) {a1=0x06;a2=0x38;a3=0x8f;}// 17 if(Q1==0x12) {a1=0x06;a2=0x7f;a3=0x8f;}// 18 if(Q1==0x13) {a1=0x06;a2=0x7d;a3=0x8f;}// 19 if(Q1==0x14) {a1=0x5b;a2=0x3f;a3=0x8f;}// 20 if(Q1==0x15) {a1=0x5b;a2=0x30;a3=0x8f;}// 21 if(Q1==0x16) {a1=0x5b;a2=0x5b;a3=0x8f;}// 22 if(Q1==0x17) {a1=0x5b;a2=0x79;a3=0x8f;}// 23 if(Q1==0x18) {a1=0x5b;a2=0x74;a3=0x8f;}// 24 if(Q1==0x19) {a1=0x5b;a2=0x6d;a3=0x8f;}// 25 if(Q1==0x1a) {a1=0x5b;a2=0x6f;a3=0x8f;}// 26 if(Q1==0x1b) {a1=0x5b;a2=0x38;a3=0x8f;}// 27 if(Q1==0x1c) {a1=0x5b;a2=0x7f;a3=0x8f;}// 28 if(Q1==0x1d) {a1=0x5b;a2=0x7d;a3=0x8f;}// 29 if(Q1==0x1e) {a1=0x4f;a2=0x3f;a3=0x8f;}// 30 if(Q1==0x1f) {a1=0x4f;a2=0x30;a3=0x8f;}// 31 if(Q1==0x20) {a1=0x4f;a2=0x5b;a3=0x8f;}// 32 if(Q1==0x21) {a1=0x4f;a2=0x79;a3=0x8f;}// 33 if(Q1==0x22) {a1=0x4f;a2=0x74;a3=0x8f;}// 34 if(Q1==0x23) {a1=0x4f;a2=0x6d;a3=0x8f;}// 35 if(Q1==0x24) {a1=0x4f;a2=0x6f;a3=0x8f;}// 36 if(Q1==0x25) {a1=0x4f;a2=0x38;a3=0x8f;}// 37 if(Q1==0x26) {a1=0x4f;a2=0x7f;a3=0x8f;}// 38 if(Q1==0x27) {a1=0x4f;a2=0x7d;a3=0x8f;}// 39 if(Q1==0x28) {a1=0x66;a2=0x3f;a3=0x8f;}// 40 if(Q1==0x29) {a1=0x66;a2=0x30;a3=0x8f;}// 41 if(Q1==0x2a) {a1=0x66;a2=0x5b;a3=0x8f;}// 42 if(Q1==0x2b) {a1=0x66;a2=0x79;a3=0x8f;}// 43 if(Q1==0x2c) {a1=0x66;a2=0x74;a3=0x8f;}// 44 if(Q1==0x2d) {a1=0x66;a2=0x6d;a3=0x8f;}// 45 // 0:0000 0011 // b2=1;b3=1; // 1:1111 0011 // b1=0;b4=1; // 2:0010 0101 //1 // 3:0110 0001 // P0=a1; // 4:1101 0001 // 5:0100 1001 // 6:0000 1001 // 7:1110 0011 // 8:0000 0001 // 9:0100 0001 // C:0000 1110 // mDelay(1); // b2=0;b3=1;b1=1;b4=1; P0=a1; mDelay(1); b2=1;b3=0;b1=1;b4=1; P0=a2; mDelay(1); b2=1;b3=1;b1=1;b4=0; P0=a3; mDelay(1); } } void UART_SER (void) interrupt 4 //串行中断服务程序 { unsigned char temp; //定义临时变量 if (RI) { RI = 0; temp = SBUF; if ((temp == 0x02) || (begin == 1)) { begin = 1; if(temp!=0x02) { Q1=temp; t++; if(t>=1) { begin=0;t=0; } } } } } 丛机2; #include #include #define uchar unsigned char #define uint unsigned int ***it b1=P2^0; ***it b2=P2^1; ***it b3=P2^2; ***it b4=P2^3; uchar t=0; uchar Q1; int begin=0; void mDelay(int utime) { int i,j,k; for(i=0;i { for(j=0;j<5;j++) { for(k=0;k<99;) k++; } } } /*------------------------------------------------ 串口初始化 ------------------------------------------------*/ void InitUART (void) { SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xD0; // TH1: 重装值 9600 波特率 晶振 11.0592MHz TR1 = 1; // TR1: timer 1 打开 EA = 1; //打开总中断 //ES = 1; //打开串口中断 } void main (void) { int i; uchar a1,a2,a3; InitUART(); ES=1; while(1) { //90度 if(Q1==0x00) {a1=0x00;a2=0x3f;a3=0x8f;}// 0 if(Q1==0x01) {a1=0x00;a2=0x30;a3=0x8f;}// 1 if(Q1==0x02) {a1=0x00;a2=0x5b;a3=0x8f;}// 2 if(Q1==0x03) {a1=0x00;a2=0x79;a3=0x8f;}// 3 if(Q1==0x04) {a1=0x00;a2=0x74;a3=0x8f;}// 4 if(Q1==0x05) {a1=0x00;a2=0x6d;a3=0x8f;}// 5 if(Q1==0x06) {a1=0x00;a2=0x6f;a3=0x8f;}// 6 if(Q1==0x07) {a1=0x00;a2=0x38;a3=0x8f;}// 7 if(Q1==0x08) {a1=0x00;a2=0x7f;a3=0x8f;}// 8 if(Q1==0x09) {a1=0x00;a2=0x7d;a3=0x8f;}// 9 if(Q1==0x0a) {a1=0x06;a2=0x3f;a3=0x8f;}// 10 if(Q1==0x0b) {a1=0x06;a2=0x30;a3=0x8f;}// 11 if(Q1==0x0c) {a1=0x06;a2=0x5b;a3=0x8f;}// 12 if(Q1==0x0d) {a1=0x06;a2=0x79;a3=0x8f;}// 13 if(Q1==0x0e) {a1=0x06;a2=0x74;a3=0x8f;}// 14 if(Q1==0x0f) {a1=0x06;a2=0x6d;a3=0x8f;}// 15 if(Q1==0x10) {a1=0x06;a2=0x6f;a3=0x8f;}// 16 if(Q1==0x11) {a1=0x06;a2=0x38;a3=0x8f;}// 17 if(Q1==0x12) {a1=0x06;a2=0x7f;a3=0x8f;}// 18 if(Q1==0x13) {a1=0x06;a2=0x7d;a3=0x8f;}// 19 if(Q1==0x14) {a1=0x5b;a2=0x3f;a3=0x8f;}// 20 if(Q1==0x15) {a1=0x5b;a2=0x30;a3=0x8f;}// 21 if(Q1==0x16) {a1=0x5b;a2=0x5b;a3=0x8f;}// 22 if(Q1==0x17) {a1=0x5b;a2=0x79;a3=0x8f;}// 23 if(Q1==0x18) {a1=0x5b;a2=0x74;a3=0x8f;}// 24 if(Q1==0x19) {a1=0x5b;a2=0x6d;a3=0x8f;}// 25 if(Q1==0x1a) {a1=0x5b;a2=0x6f;a3=0x8f;}// 26 if(Q1==0x1b) {a1=0x5b;a2=0x38;a3=0x8f;}// 27 if(Q1==0x1c) {a1=0x5b;a2=0x7f;a3=0x8f;}// 28 if(Q1==0x1d) {a1=0x5b;a2=0x7d;a3=0x8f;}// 29 if(Q1==0x1e) {a1=0x4f;a2=0x3f;a3=0x8f;}// 30 if(Q1==0x1f) {a1=0x4f;a2=0x30;a3=0x8f;}// 31 if(Q1==0x20) {a1=0x4f;a2=0x5b;a3=0x8f;}// 32 if(Q1==0x21) {a1=0x4f;a2=0x79;a3=0x8f;}// 33 if(Q1==0x22) {a1=0x4f;a2=0x74;a3=0x8f;}// 34 if(Q1==0x23) {a1=0x4f;a2=0x6d;a3=0x8f;}// 35 if(Q1==0x24) {a1=0x4f;a2=0x6f;a3=0x8f;}// 36 if(Q1==0x25) {a1=0x4f;a2=0x38;a3=0x8f;}// 37 if(Q1==0x26) {a1=0x4f;a2=0x7f;a3=0x8f;}// 38 if(Q1==0x27) {a1=0x4f;a2=0x7d;a3=0x8f;}// 39 if(Q1==0x28) {a1=0x66;a2=0x3f;a3=0x8f;}// 40 if(Q1==0x29) {a1=0x66;a2=0x30;a3=0x8f;}// 41 if(Q1==0x2a) {a1=0x66;a2=0x5b;a3=0x8f;}// 42 if(Q1==0x2b) {a1=0x66;a2=0x79;a3=0x8f;}// 43 if(Q1==0x2c) {a1=0x66;a2=0x74;a3=0x8f;}// 44 if(Q1==0x2d) {a1=0x66;a2=0x6d;a3=0x8f;}// 45 // 0:0000 0011 // b2=1;b3=1; // 1:1111 0011 // b1=0;b4=1; // 2:0010 0101 //1 // 3:0110 0001 // P0=a1; // 4:1101 0001 // 5:0100 1001 // 6:0000 1001 // 7:1110 0011 // 8:0000 0001 // 9:0100 0001 // C:0000 1110 // mDelay(1); // b2=0;b3=1;b1=1;b4=1; P0=a1; mDelay(1); b2=1;b3=0;b1=1;b4=1; P0=a2; mDelay(1); b2=1;b3=1;b1=1;b4=0; P0=a3; mDelay(1); } } void UART_SER (void) interrupt 4 //串行中断服务程序{ unsigned char temp; //定义临时变量 if (RI) { RI = 0; temp = SBUF; if ((temp == 0x01) || (begin == 1)) { begin = 1; if(temp!=0x01) { Q1=temp; t++; if(t>=1) { begin=0;t=0; } //???/? } } } 尤其是每个中断函数里面都有什么作用?
|
|
相关推荐
3个回答
|
|
找个时间 一行一行跟你说哈 !!! 现在忙
|
|
|
|
哇,程序好长;
while(1) { //90度 if(Q1==0x00) {a1=0x00;a2=0x3f;a3=0x8f;}// 0 if(Q1==0x01) {a1=0x00;a2=0x30;a3=0x8f;}// 1 if(Q1==0x02) {a1=0x00;a2=0x5b;a3=0x8f;}// 2 if(Q1==0x03) {a1=0x00;a2=0x79;a3=0x8f;}// 3 if(Q1==0x04)............ 这里为什么不用 else if 呢?每个值都要比较一次!?比如Q1=0,然后后面还要if 44次? 如果使用查表的方式,是不是会更好呢? |
|
|
|
恩是的不过这段我不是很理解void UART_SER (void) interrupt 4 //串行中断服务程序
{ if (RI) //从机没有发送数据,只有主机发送数据。这里接受的是主机发送的数据吗? { RI = 0; temp = SBUF; if ((temp == 0xc5) || (begin == 1))// ???????0xc5什么意思 { begin = 1; //什么作用? if(temp!=0xc5)//??? { array[t]=temp;//??? t++; if(t>=13) { begin=0;t=0; } //??? } } } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》 第十六章 WATCH_DOG实验
460 浏览 0 评论
【敏矽微ME32G070开发板免费体验】+ADC测试与LED点亮
418 浏览 0 评论
飞凌嵌入式-ELFBOARD ELF 2的硬件知识分享--核心板
352 浏览 0 评论
【敏矽微ME32G070开发板免费体验】\\+Lora通信终端产品开发项目
514 浏览 0 评论
1576 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11972 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 04:25 , Processed in 0.767786 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号