📄 timer0.c.bak
字号:
/*************T/C0作为定时器,触发定时中断,来进行周期性的作业***************/
#include<iom8v.h>
#include <macros.h>
extern unsigned int adc_rel;
extern unsigned char adc_mux;
extern void putchar(unsigned char c);
extern void puts(char *s);
extern unsigned char rom_read(unsigned int Address);
extern void rom_write(unsigned int Address,unsigned char Data);
extern unsigned char i2c_read(unsigned char RomAddress);
extern void i2c_write(unsigned char Wdata,unsigned char RomAddress);
extern unsigned int eeprom_addr;
extern unsigned char eeprom_val;
unsigned char softFlag=0x00;//最小位为有AD转换数据发送请求,次位为UART口转换为普通IO口请求
#pragma interrupt_handler timer0:10
void timer0(void)
{
unsigned char strTemp[5]={0},i;
unsigned char *pStr=strTemp;
unsigned int intTemp;
TIMSK&=0b11111110;
if(softFlag&0b00000001)//如果有数据发送请求,则在定时中断中将数据发送出去。
{
pStr+=3;//回到指针尾部,因为数据先计算出个位数(需将数据转换为BCD码输出)
for(i=4;i!=0;i--)
{
*pStr=adc_rel%10+48;
adc_rel/=10;
pStr--;
}
pStr=strTemp;
puts(pStr);
softFlag&=0b11111110;
}
else if(softFlag&0b00000010)//如果有EEPROM读请求,则在定时中断中将数据发送出去。
{
intTemp=(int)rom_read(eeprom_addr);//读取内部EEPROM数据
//intTemp=(int)i2c_read((unsigned char)eeprom_addr);//读取外部EEPROM数据
pStr+=3;//回到指针尾部,因为数据先计算出个位数(需将数据转换为BCD码输出)
for(i=4;i!=0;i--)
{
*pStr=intTemp%10+48;
intTemp/=10;
pStr--;
}
pStr=strTemp;
puts(pStr);
softFlag&=0b11111101;
}
else if(softFlag&0b00000100)//如果有EEPROM写请求,则在定时中断中将数据写入。
{
/*调试的目标程序行*/
rom_write(eeprom_addr,eeprom_val);//写入内部EEPROM数据
//i2c_write(eeprom_val,(unsigned char)eeprom_addr);//写入外部EEPROM数据
/***************以下内容为程序调试内容*************************
puts("eeprom地址:");
pStr+=3;//回到指针尾部,因为数据先计算出个位数(需将数据转换为BCD码输出)
for(i=4;i!=0;i--)
{
*pStr=eeprom_addr%10+48;
eeprom_addr/=10;
pStr--;
}
pStr=strTemp;
puts(pStr);
puts("eeprom数据:");
intTemp=(unsigned int)eeprom_val;
pStr+=3;//回到指针尾部,因为数据先计算出个位数(需将数据转换为BCD码输出)
for(i=4;i!=0;i--)
{
*pStr=intTemp%10+48;
intTemp/=10;
pStr--;
}
pStr=strTemp;
puts(pStr);
//**************以上内容为程序调试内容*************************/
softFlag&=0b11111011;
}
TIMSK|=0x01;//Timer0中断允许
TCNT0=0x10;//预植16,定时30ms
}
void timer0_init(void)
{
TIMSK|=0x01;//Timer0中断允许
TCCR0=0x04;//1024分频,8MHz、TCNT0=0x10下,每次中断大约1/8ms
TCNT0=0x10;//预植16,累计计数240发生中断,定时30ms
//SEI();由MAIN函数统一开放
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -