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

📄 timer0.c.bak

📁 详细介绍M8两版间通讯
💻 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 + -