📄 main._c
字号:
/******************************************/
/* 北京MCU学习之家 */
/* 采集红外输入数据的高低电平保持时间程序 */
/* 作者:白如冰 */
/* 2005年10月1日 */
/* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
/******************************************/
// 1、使用WIN9X/WIN2000/XP的超级终端,进行通信调试。
// 2、通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。
// 3、输出高低电平的保持时间,单位是微秒。
#include <iom8v.h>
#include "infrared_measure.h"
#define fosc 8000000 //晶振8MHZ
#define baud 9600 //波特率
extern void init_infr(void);
unsigned char uia_data[5]; //5位ASC码存储区
void delay_us(unsigned int n)
{
unsigned int i;
for(i=n;i>0;i--);
}
void delay_1ms(void)
{ unsigned int i;
for(i=1;i<(unsigned int)(1144-2);i++)
;
}
void delay_ms(unsigned int n)
{
unsigned int i=0;
while(i<n)
{delay_1ms();
i++;
}
}
unsigned char *uint_asc(unsigned int data) //字转换为5位ASC码
{
unsigned char *uia;
unsigned int temp;
uia=uia_data;
temp=data;
uia+=4;
*uia--=temp%10+0x30;
temp=data;
*uia--=(temp/10)%10+0x30;
temp=data;
*uia--=(temp/100)%10+0x30;
temp=data;
*uia--=(temp/1000)%10+0x30;
*uia=temp/10000+0x30;
uia=uia_data;
return(uia);
}
/* 字符输出函数 */
void putchar(unsigned char c)
{
while (!(UCSRA&(1<<UDRE)));
UDR=c;
}
/* 字符串输出函数 */
int puts(char *s)
{
while (*s)
{
putchar(*s);
s++;
}
return 1;
}
/* 含回车换行的字符串输出函数 */
void puts_hh(char *s)
{
while (*s)
{
putchar(*s);
s++;
}
putchar(0x0a);//换行
putchar(0x0d);//回车
}
/* UART初始化 */
void uart_init(void)
{
UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
UBRRL=(fosc/16/(baud+1))%256;
UBRRH=(fosc/16/(baud+1))/256;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
}
void main(void)
{
unsigned char i,*p;
uart_init();
init_infr();
while(1)
{
delay_ms(2000);
for(i=0;i<74;i++)
{
p=uint_asc(counter_buffer[i]);
putchar(*p++);
putchar(*p++);
putchar(*p++);
putchar(*p++);
putchar(*p++);
puts(" ");
}
for(i=0;i<74;i++)
counter_buffer[i]=0;
n=0;
flag_start=0;
TCCR1B=0;
TCNT1=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -