#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;
//接收寄存器溢出中断