诡异的串口无法发送
2019-03-24 20:41发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
写的熔丝位匹配程序,可以进入if判断语句,就是不往串口寄存器UDR0写入数据0x55,求高人解答,感激涕零!
#include <avr/io.h>
#include<avr/interrupt.h>
#define F_CPU 12000000UL
#define baud 9600
int fuse_check();
void uart0_init(void);
void delay_1ms();
void main()
{
uart0_init();
if(fuse_check()==0)
{
while(1)
{
while( !(UCSR0A & (1<<UDRE0)) );
UDR0 = 0x55; //发送数据0x55
//delay_1ms();
}
}
//else
// UDR0 = 0x66; //发送数据0x66
}
int fuse_check()
{
unsigned int a=0,b=1;
// 读取熔丝位低字节
asm("LDI R30,0x00"); //赋0x0000给Z指针
asm("LDI R31,0x00");
SPMCSR = 0x09; //置位SPMCSR寄存器
asm("LPM"); //读取低字节数据给R0
asm("STS 0x002E,R0"); //复制R0数据给PORTE
if(PORTE==0x0C) //低字节匹配判断
{
//读取熔丝位高字节
asm("LDI R30,0x03"); //赋0x0003给Z指针
asm("LDI R31,0x00");
SPMCSR=0x09; //置位SPMCSR寄存器
asm("LPM"); //读取低字节数据给R0
asm("STS 0x002E,R0"); //复制R0数据给PORTE
if(PORTE==0x00) //高字节匹配判断
{
//读取熔丝位扩展字节
asm("LDI R30,0x02"); //赋0x0002给Z指针
asm("LDI R31,0x00");
SPMCSR=0x09; //置位SPMCSR寄存器
asm("LPM"); //读取低字节数据给R0
asm("STS 0x002E,R0"); //复制R0数据给PORTE
if(PORTE==0x4A) //扩展字节匹配判断
{
b=0;
return b;
}
else
{
a=1;
return a;
}
}
else
{
a=1;
return a;
}
}
else
{
a=1;
return a;
}
}
//UART0初始化
void uart0_init(void)
{
UCSR0A = 0x00; //设置波特率时无效
UCSR0B = 0x00;
UCSR0C = 0x00;
UBRR0L =(F_CPU/baud/8-1)%256;
UBRR0H =(F_CPU/baud/8-1)/256;
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); //8位数据位,1位停止位,无校验
UCSR0B = (1<<TXEN0); // 使能发送接收
}
此帖出自
小平头技术问答
一周热门 更多>