编程实现单片机与PC机的串行通信。具体要求为:
1)单片机中断接收PC机的数 据并回传给PC机;
2)如果接收的数据是01H,则 LED流水;如果接收的是02H,则 LED 闪烁;如果接收的是03H,则LED点亮。
代码截图:
连线截图:
代码全部:
#include <REGX51.H>
#define MAIN_Fosc 24000000UL
#define LED_IO P2
unsigned char ledArr[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char receive=0;
unsigned char send=0;
//-------------------------------------------------------------
void delay_ms(unsigned int ms)
{
unsigned int i;
do{
i = MAIN_Fosc / 6030;
while(--i);
}while(--ms);
}
//-------------------------------------------------------------
void liushui(){
int i;
for(i=0;i<8;i++){
LED_IO=~ledArr[i];
delay_ms(10);
}
}
void liang(){
P2=0;
}
//-------------------------------------------------------------
void shan (){
int i;
for(i=0;i<8;i++){
P2=0x00;
delay_ms(10);
P2=~0x00;
delay_ms(10);
}
}
//-------------------------------------------------------------
void main()
{
SCON=0X50; //串口工作方式
TMOD=0X20; //T1工作方式 256
TH1=0Xfd; //9600波特率
TL1=0Xfd; //9600
ES=1; //打开串口中断
EA=1; //总中断开启
TR1=1; //TMOD开启,软件开启
while(1){
}
}
//-------------------------------------------------------------
void serial_server() interrupt 4
{
if(TI)
{
TI=0; //单片机发送置0
}
if(RI)
{
RI=0; //先置0后面才能继续接收
receive=SBUF; //单片机接收串口
switch(receive)
{
case 1: liushui(); break;
case 2: liang(); break;
case 3: shan(); break;
default: SBUF =0xef; //若不是123的命令则单片机发送ef
}
}
}
实现功能如下:输入01
实现流水:
输入2:
实现闪烁:
输入3:
实现常亮:
若输入除了123的数字,单片机发送ef:
实验成功。