⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 STM8S105S4程序
💻 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 + -