另外此软件还带有电阻分压计算 和并联电阻计算
生成的代码如下:
#include <iostm8s103f3.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
void delay_ms(uchar ms)
{
uchar i,j;
while(ms--)
{
for(i=4;i!=0;i--)
for(j=100;j!=0;j--);
}
}
void adc_init(void)
{
ADC_CR1_ADON = 1; //打开adc
ADC_CSR_CH = 0; //AIN0脚
ADC_CR1_SPSEL = 2; //4分频时钟
}
uint adc_get(void)
{
uint dataH, dataL;
ulong value = 0;
uint voltage = 0; //电压单位为(mV)
ADC_CR1_ADON = 1; //使能adc
while(ADC_CSR_EOC==0);
dataH = ADC_DRH; //左对齐数据
dataL = ADC_DRL; //读取寄存器数据
ADC_CSR_EOC = 0;
value = dataH<<2|dataL;
voltage = (value*5000)>>10; //计算实际电压
return voltage;
}
void uart1_init(void)
{
UART1_CR1=0x00;
UART1_CR2=0x00;
UART1_CR3=0x00;
UART1_BRR2 = 0x01;
UART1_BRR1 = 0x01; //115200波特率
}
void Exit_Init(void)
{
EXTI_CR1_PAIS = 2; //下降沿触发
}
void WDT_Init(void)
{
IWDG_KR = 0xCC; //启动看门狗
IWDG_KR = 0x55; //解除写保护
IWDG_PR = 0x06; //256分频,最高1.02秒
IWDG_RLR = 125; //500ms
IWDG_KR = 0xAA; //写保护
}
void WDT(void)
{
IWDG_KR = 0xAA; //喂狗指令WDT();
}
void timer_Init(void)
{
TIM1_PSCRH = 0;
TIM1_PSCRL = 1; //(1+1)分频为1M
TIM1_ARRH = 0x3;
TIM1_ARRL = 0xE8; //每1000us中断一次
TIM1_IER = 0x01; //允许更新中断
TIM1_CR1 = 0x01; //计数器使能,开始计数
//TIM2/3/4/5/6须使用与芯片对应的头文件
TIM2_PSCR_PSC = 1; //2^1 分频为1M
TIM2_ARRH = 0x3;
TIM2_ARRL = 0xE8; //每1000us中断一次
TIM2_IER = 0x01; //允许更新中断
TIM2_CR1 = 0x01; //计数器使能,开始计数
}
void main(void)
{
asm("sim"); //关总中断
adc_init();
uart1_init();
Exit_Init();
timer_Init();
WDT_Init();
asm("rim"); //开总中断
while(1)
{
asm("nop");
}
}
#define TLI_vector 0x02
#define EXTI0_PA_vector 0x05
#define EXTI1_PB_vector 0x06
#define EXTI2_PC_vector 0x07
#define EXTI3_PD_vector 0x08
#define EXTI4_PE_vector 0x09
#pragma vector = EXTI0_PA_vector
__interrupt void EXTI0_PA(void)
{
//your code here
}
#pragma vector = TIM1_OVR_UIF_vector
__interrupt void TIM1_OVR_UIF(void)
{
TIM1_SR1_UIF = 0;
//add your code here
}
#pragma vector = TIM2_OVR_UIF_vector
__interrupt void TIM2_OVR_UIF(void)
{
TIM2_SR1_UIF = 0;
//add your code here
}
另附上 库函数软件版的手册
再也不用整天的对着手册查找了
想用什么库函数 什么寄存器直接搜索 全中文显示方便快捷
资料下载如下: