#include“stm8s_it.h”

uint8_tHexTable[]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};

uint8_ti=0;

//串口UART1初始化

voidInit_UART(void)

{

//默认初始化

UART1_DeInit();

//设置波特率96008位数据1位停止位无校验外部时钟不可用模式接收发送

UART1_Init((u32)9600,UART1_WORDLENGTH_8D,UART1_STOPBITS_1,UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENABLE);

//设置接收寄存器溢出中断

UART1_ITConfig(UART1_IT_RXNE_OR,ENABLE);

}

//定时器TIM4初始化

voidInit_Timer4(void)

{

//1ms中断一次

TIM4_TimeBaseInit(TIM4_PRESCALER_128,124);

/*ClearTIM4updateflag*/

TIM4_ClearFlag(TIM4_FLAG_UPDATE);

/*Enableupdateinterrupt*/

TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);

TIM4_Cmd(ENABLE);

}

//发送字节

voidSend(uint8_tdat)

{

//检查并等待发送寄存器是否为空

while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));

//发送字节

UART1_SendData8(dat);

}

//发送16位16进制

voidUART1_mysend16hex(u16dat)

{

Send(HexTable[(dat》》12)&0x0f]);

Send(HexTable[(dat》》8)&0x0f]);

Send(HexTable[(dat》》4)&0x0f]);

Send(HexTable[(dat)&0x0f]);

}

//发送8位16进制

voidUART1_mysend8hex(uint8_tdat)

{

Send(HexTable[(dat》》4)&0x0f]);

Send(HexTable[(dat)&0x0f]);

Send(‘U’);

}

voidmain()

{

//初始化

Init_UART();

Init_Timer4();

//中断开启

enableInterrupts();

while(1)

{

}

}

//这个必须加上不然会报错估计是库的要求

#ifdefUSE_FULL_ASSERT

voidassert_failed(u8*file,u32line)

{

while(1)

{

}

}

#endif

接下来说说中断函数表stm8s_it.c

其中只要选用两个中断函数就可以了:

INTERRUPT_HANDLER(UART1_RX_IRQHandler,18)接收寄存器溢出中断

里面添加安卓上位机发送过来的数据的处理程序,我这里写的是ADC0832通道选择的判断。

INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler,23)定时器4计数器溢出中断

里面添加初始化ADC0832和ADC0832数据读取并UART1发送到安卓上位机。

stm8s_it.c程序:

#include“stm8s_it.h”

#include“ADC0832.h”

externuint8_ti;

uint8_tchannel=1;

//接收寄存器溢出中断

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查