提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
STC8G1K08A单片机
stc8g1k08a单片机引脚功能:
1.实际接线
因为内置晶振,所以不需要外接晶振。图中VCC,GND跨接电容起到退耦作用,在通断电时保护单片机。CH340N模块的TX跟RX分别接到STC8G1K08A的RX(5号引脚,也就是程序中的P3.0)跟TX(6号引脚,也就是程序中的P3.1)上,下面是实物接线图:
一、使用串口前先配置串口
这里我们使用宏晶的STC-ISP软件进行波特率配置
1.系统频率选择11.0592MHz(STC8G1k08a的运行频率可以在下载程序的时候进行设置,最大为35MHz)
2.波特率设置为9600bps
3.定时器时钟为1T
4.使能串口中断
5.生成c代码复制到keil
二、使用步骤
1.添加STC库
选择
添加后就可以使用<stc8g.h>了
例程完整代码
代码如下:
#include<stc8g.h>
#include<stdio.h>
void setup();
void loop();
void Uart1_Init(void);
void Sendbyte(unsigned char dat);
void delayms(unsigned int delay_time_ms);
char putchar(char c);
void main(){setup();while(1)loop();}//主程序
unsigned char recv;//收到的8位数据
void setup(){//初始化函数
Uart1_Init();
}
void loop(){//循环执行函数
delayms(1000);
printf("Hello World");
}
void Uart1_Init(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
ES = 1; //使能串口1中断
EA = 1; //使能总中断
}
void Sendbyte(unsigned char dat){//发送8位数据到串口
SBUF = dat;
while(!TI);
TI=0;
}
void delayms(unsigned int delay_time_ms){//延时X毫秒函数
while(delay_time_ms){
unsigned char data i, j;
i = 15;
j = 90;
do
{
while (--j);
} while (--i);
delay_time_ms--;
}
}
char putchar(char c){//重定义printf()函数,用于串口打印信息
Sendbyte(c);
return c;
}
void Read_UART()interrupt 4{//串口中断时执行
if(RI){
RI=0;
recv = SBUF;
switch(recv){
case '0':printf(" recv:0 \n");break;
case '1':printf(" recv:1 \n");break;
case '2':printf(" recv:2 \n");break;
case '3':printf(" recv:3 \n");break;
default:printf("NO\n");break;
}
}
}
下载程序后打开串口监视器每秒会收到一次“Hello world”
发送0,1,2,3这四个数,单片机会回复:“recv”。
发送其他数,回复“NO”