具体功能实现:
甲单片机通过按键可以控制乙单片机的LED灯,而乙单片机通过按键可以让连接甲单片机的数码管数字自增加一。
使用器件:
AT89C51、按键、排阻、4只LED灯、2片MAX232芯片、COM口(CONN-D9F)、数码管、若干电阻
Proteus仿真原理图:
仿真:
乙机控制甲机的数码管显示:
甲机控制乙机的LED灯:
知识介绍:
Proteus布线
为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。
定时中断系统简图
定时器资源
定时器个数:3个(T0,T1,T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源。
(T0和T1的操作方式是所有51单片机共有的)
中断系统
执行现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序
中断号:
外部中断0 interrupt 0
定时器0 interrupt 1
外部中断1 interrupt 2
定时器中断1 interrupt 3
串口中断 interrupt 4
细节注意
通信双方必须要有相同的波特率,通过发送中断标志和接受中断标志控制发送和接受的进行。
主要代码(C语言)KEIL5实现:
甲单片机:
#include #define uint unsigned int #define uchar unsigned char sbit LED1 = P1^0; sbit LED2 = P1^3; sbit K1 = P1^7; uchar Operation_NO = 0; uchar code DSY_CODE[]= { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f }; void Delay(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } void putc_to_SerialPort(uchar c) { SBUF = c; while(TI == 0); TI = 0; } void main() { LED1=LED2=1; P0 = 0x00; SCON = 0x50; TMOD = 0x20; PCON = 0x00; TH1 = 0xfd; TL1 = 0xfd; TI = 0; RI = 0; TR1 = 1; IE = 0x90; while(1) { Delay(100); if(K1 == 0) { while(K1==0); Operation_NO=(Operation_NO+1)%4; switch(Operation_NO) { case 0: putc_to_SerialPort('X'); LED1=LED2=1; break; case 1: putc_to_SerialPort('A'); LED1=0;LED2=1;break; case 2: putc_to_SerialPort('B'); LED2=0;LED1=1;break; case 3: putc_to_SerialPort('C'); LED1=0;LED2=0;break; } } } } void Serial_INT() interrupt 4 { if(RI) { RI = 0; if(SBUF>=0&&SBUF<=9) P0 = DSY_CODE[SBUF]; else P0 = 0x00; } } 乙单片机: #include #define uint unsigned int #define uchar unsigned char sbit LED1 = P1^0; sbit LED2 = P1^3; sbit K1 = P1^7; uchar NumX = 0xff; void Delay(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } void main() { LED1=LED2=1; SCON = 0x50; TMOD = 0x20; PCON = 0x00; TH1 = 0xfd; TL1 = 0xfd; TI = 0; RI = 0; TR1 = 1; IE = 0x90; while(1) { Delay(100); if(K1==0); { while(K1==0); NumX = (NumX+1)%11; SBUF = NumX; while(TI == 0); TI = 0; } } } void Serial_INT() interrupt 4 { if(RI) { RI = 0; switch(SBUF) { case 'X': LED1=1;LED2=1;break; case 'A': LED1=0;LED2=1;break; case 'B': LED2=0;LED1=1;break; case 'C': LED1=0;LED2=0; } } } Q: COM口(CONN-D9N)接线图,如下图所示: A: OM口(CONN-D9F和CONN-D9M)该如何接线? CONN-D9F和CONN-D9M的连接必须交叉,.这样连的结果是一个的发送接另一个的接收,一个的接收接另一个的发送 单片机串口和MAX232、MAX232之间是如何连接的? 单片机与MAX232的连接都是T接T,R接R; 各自的MAX232与对方连接是交叉的。 单片机SBUF总线协议图:问题解答:
A:
Q:
A:
Q: