2184|0

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

诡异的串口无法发送 [复制链接]

写的熔丝位匹配程序,可以进入if判断语句,就是不往串口寄存器UDR0写入数据0x55,求高人解答,感激涕零!

#include
#include

#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<
                               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<
    UCSR0B = (1<

}  
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表