📄 ms_c.h
字号:
//C8051f020与89c52联机软件包
//串行通讯 波特率 9600
//占用资源 UART0 T1 (产生波特率)
//占用引脚 P0.0 P0.1
//可供调用函数名 void SYSCLK_Init(void) 配置系统时钟使用外部晶振22.1184MHz
// void send_led(void) 发送一个起始位0xf4+8位数据位 (0~9)
// void PORT_Init (void) 端口配置
// void UART0_Init(void) UART0初始化
// void delay(uint t) 延时函数
//
//全局变量名 bit KEY_FLAG 有键按下并发送完键值(0XF3+键值+键值)标志位
// uchar KEY_DATA 当KEY_FLAG==1时 读KEY_DATA得键值 只读
// uchar LED_BUF[9]={0xf4,0}; LED显示缓冲 可修改
//
//
//作者:易北
//时间:2007年8月2号
#include "c8051f020.h"
#define uchar unsigned char
#define uint unsigned int
sbit OUT=P1^6;
sbit KEY=P3^7;
bit RCV_KEY_FLAG=0; //接收开始标志
bit KEY_FLAG=0; //有键值接收到标志位
uchar KEY_DATA=0; //串口接收的键值
uchar LED_BUF[10]={0xf4,0}; //发送至LED的数值
//LED_BUF[9]为闪烁标号 0表示所有数码管都不闪烁 1~8 表示 1~8 号数码管闪烁 9表示所有的都闪烁
void delay(uchar t)
{
uchar k;
while(t--)
for(k=0;k<255;k++);
}
//配置系统时钟使用外部晶振22.1184MHz
void SYSCLK_Init(void)
{
uchar i;
WDTCN=0xde; //禁用看门狗
WDTCN=0xad;
OSCXCN=0x67;
for ( i=0; i<255; i++ ) ;
while(!(OSCXCN & 0x80 ) ); //等待晶体振荡器稳定
OSCICN=0x88; //选择外部时钟源 允许时钟丢失检测 检测到时钟丢失将复位
CKCON=0x00; //T0 12分频
}
//端口配置
void PORT_Init (void)
{
XBR0=0x04; //允许UART0
XBR1=0x00;
XBR2=0xc0; //允许交叉开关 禁止弱上拉
P0MDOUT=0xff; //1 为推挽 0为漏极开路
P1MDIN=0xff; //0 配置为模拟输入 1 配置为数字输入
P1MDOUT=0xff; //1 为推挽 0为漏极开路
P2MDOUT=0xff; //1 为推挽 0为漏极开路
P3MDOUT=0x00; //1 为推挽 0为漏极开路
P3IF=0; //端口3中断标志
P74OUT=0xff;
}
//UART0初始化
void UART0_Init(void)
{
PCON=0x80; //写SM00 SM10 波特率翻倍
SCON0=0x70; //方式1
IE=0x90; //允许 UART0中断
TMOD=0x20;
TH1=0xf4; //产生波特率
TL1=0xf4;
TR1=1;
}
void send_led(void) //发送一个起始位0xf4+8位数据位 (0~9)
{
uchar i;
for(i=0;i<10;i++)
{
SBUF0=LED_BUF[i];
delay(10);
}
}
void UART0 (void) interrupt 4
{
if(RI0==1) //确定为接收引发中断
{
RI0=0;
if(RCV_KEY_FLAG)
{
KEY_DATA=SBUF0;
KEY_FLAG=1; //接收标志
OUT=~OUT;
}
else if(RCV_KEY_FLAG==0 && SBUF0==0xf3 )
{
RCV_KEY_FLAG=1;
}
}
else if(TI0==1) //确定为发送完引发中断
{
TI0=0; }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -