项目:用按键控制单片机与电脑通信。用计数器0,工作方式1:每按下一次按键,计数值加1,当按下3次之后,单片机向电脑端的串行软件发送一次0xaa。 接线方式:将单片机的P3.0、P3.1连接到J32:用RS232转 USB这根线,将实验箱主板上的RS232接口与电脑连接:P3.4接按键K1。,写出适配于Keli uVision4的代码
时间: 2024-03-02 12:50:07 浏览: 114
以下是适配于Keil uVision4的代码:
```
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit Key1 = P3^4; // 按键K1连接到P3.4
uchar count = 0; // 计数器初值为0
void InitUart() // 初始化串口
{
TMOD = 0x20; // 定时器1工作在方式2,8位自动重载模式
TH1 = 0xfd; // 波特率设为9600,晶振11.0592MHz
TL1 = 0xfd;
TR1 = 1; // 启动定时器1
SCON = 0x50; // 串口工作在模式1,允许接收
ES = 1; // 允许串口中断
EA = 1; // 开总中断
}
void SendData(uchar dat) // 发送数据
{
SBUF = dat;
while(!TI);
TI = 0;
}
void KeyScan() interrupt 0 // 外部中断0
{
_nop_(); // 延时
if(!Key1) // 检测按键是否按下
{
count++; // 计数器加1
while(!Key1); // 等待按键松开
}
if(count == 3) // 当计数器值为3时,发送数据
{
SendData(0xaa);
count = 0; // 计数器清零
}
}
void main()
{
InitUart(); // 初始化串口
EX0 = 1; // 允许外部中断0
IT0 = 1; // 设置外部中断0为下降沿触发
while(1);
}
```
代码解释:
1. 定义按键K1连接到P3.4,计数器初值为0。
2. 初始化串口,将波特率设为9600。
3. 定义发送数据函数SendData(),将数据发送到串口。
4. 外部中断0用于检测按键是否按下,按下计数器加1,当计数器值为3时发送数据0xaa。
5. 在main()函数中,初始化串口和外部中断0,设置外部中断0为下降沿触发,进入无限循环。
注意事项:
1. 在Keil uVision4中编写代码时,需要包含头文件`<reg52.h>`和`<intrins.h>`。
2. 串口通信时,需要设置波特率、串口模式等参数。
3. 外部中断0用于检测按键是否按下,需要设置中断触发方式、允许中断等参数。
4. 在发送数据前,需要判断发送缓冲区是否为空,发送完数据后需要清空发送完成标志位TI。
阅读全文