📄 main.c
字号:
/******************** 2011电子科技协会 ********************
;名称 :窜口通信
;作者 : 郑品洪
;日期 : 07/25/2011
;描述 : ;利用窜口通信将通过串口发送的0x00~0xff任意数在数码管上显示,每
5秒钟单片机会向电脑发送字符串“www.gdutelc.cn ”
注意要打开“stm8_interrupt_vector.c”修改相应内容
;***********************************************************/
#include <stm8s105s4.h>
#define uchar unsigned char
#define uint unsigned int
uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar table1[]="www.gdutelc.cn ";
uchar a,t,n;
uchar H,L;
void delay(uint s)
{
uchar i;
for(s;s>0;s--)
for(i=0;i<250;i++);
}
void init_IO(void)
{
PB_DDR=0XFF;
PB_CR1=0XFF;
PB_CR2=0X00;
PC_DDR=0XFF;
PC_CR1=0XFF;
PC_CR2=0X00;
PD_DDR=0x40; //注意要将RX配置为OD输出,将TX配置为上拉输入
PD_CR1=0x20;
PD_CR2=0x00;
}
void init_TIM2(void)
{
TIM2_EGR=0X01; //允许产生更新事件
TIM2_PSCR=0X01; //分频,使频率为1MHz
TIM2_ARRH=0XC3; //更新后计数器的值
TIM2_ARRL=0X50;
TIM2_CR1=0X05; //允许定时器工作
TIM2_IER=0X01; //允许更新中断
_asm("rim"); //汇编语句,启动定时器
}
//初始化UART子函数
void init_UART(void)
{
UART2_BRR2 = 0x00; // 这里把波特率设为9600,分频系数=2000000/9600=208
UART2_BRR1 = 0x0d; // 对应的十六进制数为00D0,BBR1=0D,BBR2=00
UART2_CR2 = 0x2C; // b3 = 1,允许发送 b2 = 1,允许接收 b5 = 1,允许产生接收中断
}
void transmit(uchar *s)
{
while(*s>0)
{
while((UART2_SR&0x40)==0); //等待数据发送完成
UART2_DR=(*s++); //发送指针所指字符
}
}
//显示子函数,将接收到的a分高位低位显示
void display(void)
{
H=a/16;
L=a%16;
PC_ODR=0x02;
PB_ODR=table[H];
delay(5);
PC_ODR=0x00;
PB_ODR=table[L];
delay(5);
}
void main()
{
init_IO();
init_UART();
init_TIM2();
while(1)
{
if(t>100) //50ms×100=5s,每5s向电脑发送一组字符串
{
t=0;
transmit(table1);
}
display();
}
}
@far @interrupt void UART2_Receiver(void) //串口通信中断服务函数
{
while((UART2_SR & 0x80) == 0x00); // 等待数据转移到移位寄存器
a=UART2_DR; // 将接收到的字符放到a中
}
@far @interrupt void TIM2_UP_IRQHandler (void) //TIM2中断函数
{
TIM2_SR1 = 0x00;
t++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -