2010年08月5日
by trueman
1 comment
查询方式:串口查询方式 中断完整方式:串口中断完整方式 简明版:串口中断程序简明版 自己太撮了,网上找到的中断例程都看着挺混乱,自己写一个简单明了的吧。 这里程序只是为了验证一下串口中断,实用的程序参见。 大概步骤就是: 1、关闭中断; 2、初始化; 3、打开中断; 另外,将中断服务程序与相应的中断向量对应起来。 稍微有点不太一样的是发送中断。一般,可以通过向寄存器写数直接发送。这里,用中断发送有两个好处:省时间、容易操作。当发送数据时,打开发送寄存器空中断;发送完成,关闭该中断。 /******************************************/ /* http://truemans.inf */ /* RS232通讯框架 */ /* 作者:HB */ /* 2010年8月5日 */ /* 目标MCU:MEGA8 晶振:内部晶振 8MHZ */ /******************************************/ #include <iom8v.h> #include <macros.h> #define FOSC 8000000 //晶振8MHZ #define BAUDRATE 19200 //波特率 unsigned char dataout,datain; /* 字符输出函数 */ void _putchar(unsigned char c) { while [...]
单片机
2010年08月5日
by trueman
2 comments
查询方式:串口查询方式 中断完整方式:串口中断完整方式 简明版:串口中断程序简明版 下边是查询方式的串口程序(uart、usart)。 从双龙的例程修改来的。验证好用! /******************************************/ /* http://truemans.inf */ /* 修改自双龙 */ /* RS232通讯框架 */ /* 作者:HB */ /* 2010年8月5日 */ /* 目标MCU:MEGA8 晶振:内部晶振 8MHZ */ /******************************************/ #include <iom8.h> #define fosc 8000000 //晶振8MHZ #define baud 19200 //波特率 /* 字符输出函数 */ void _putchar(unsigned char c) { while (!(UCSRA&(1<<UDRE))); UDR=c; } /* 字符输入函数 */ unsigned [...]
单片机
2010年08月5日
by trueman
0 comments
好久没用mega8了。今天做一个控制,要重新捡起来。 刚开始就碰到问题了。 我使用串口程序测试一下: void main(void) { char temp; uart_init(); _puts("welcome!"); while(1) { temp=_getchar(); if(0!=temp) _putchar(temp); if(‘a’==temp) _puts("haha!"); } } 发现串口不断输出welcome! 肯定是单片机不停复位。 上百度Google了一下。问题发现了。 在使用progisp时,默认的熔丝设置中,看门狗(WDTON)默认打开的。 没有喂狗,程序当然会出问题。 重新写熔丝,去掉看门狗,一切正常!
单片机