加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c8051F040的串口中断例程

(2009-09-02 11:42:17)
标签:

杂谈

分类: C8051F

#include "c8051F040.h"
#define uchar unsigned char
#define uint unsigned int

void port_init();
void os_init();
void uart_init();
void time_init();

void main()
{
        uchar g;
 WDTCN = 0xDE;                                           // 关闭看门狗 地址是OxFF
 WDTCN = 0xAD;                                           //防止意外产生的禁止操作
 os_init();                                              //晶振初始化
 port_init();           //端口初始化
 uart_init();
 time_init();
  SFRPAGE   = CONFIG_PAGE;                              //0x0F
 IE        = 0x90;                            //开中断,开总中断,开串行中断
 
 
 while(1)
 {
         SFRPAGE = UART0_PAGE;                          //0x00
    
    
  g=SBUF0;                           //下面同原89S52中中断发送串口数据原理
         SFRPAGE = UART0_PAGE;
   while(RI0==0); RI0=0;
     
       
      SFRPAGE = UART0_PAGE;
   SBUF0=g;

   while(TI0==0);
   SFRPAGE = UART0_PAGE;
   TI0=0;
 
   }
 }


}

void port_init()
{
    SFRPAGE   = CONFIG_PAGE;
 
    XBR0      = 0x04;
    XBR2      = 0x40;

    P0MDOUT   = 0X10;
 
}

void os_init()
{
    int i = 0;
    SFRPAGE   = CONFIG_PAGE;   //me Ox84=0x0F代表读或修改的时候所使用的SFR页
    OSCXCN    = 0x67; //即01100111,0:晶体振荡器未稳定;110:晶体振荡器方式
                        //0:读;111:10Mhz~30Mh, 外部22.1184M晶振,系统时钟不分频
    for (i = 0; i < 3000; i++);                         //等待外部晶振稳定,等待至少1ms
    while ((OSCXCN & 0x80) == 0);                       //第7位代表内部振荡器使能
    CLKSEL    = 0x01;           //源自外部震荡器

} 11:05 2009-9-1     

void uart_init()
{
    SFRPAGE   = UART0_PAGE;                      //0x01,
    SCON0     = 0x50;    //允许uart1,同51 SCON用法,8位UART,开始接收

}

void time_init()
{
    SFRPAGE   = TIMER01_PAGE;                   //0x00
    TCON      = 0X40;                           //启动TIMER1
    TMOD      = 0x20;                           //TIMER1 MODE2
    CKCON     = 0X10;                           //时钟控制寄存器0x8E,[NET]//ckcon^01=0x01,sysclk*1/4;  ckcon^01=0x00,sysclk*1/12;
                                                // ckcon^01=0x02,sysclk*1/48; //ckcon^01=0x03,extra clk *1/8;ckcon=0x08,sysclk,(这个未证实);
 TH1       = 0xb8;                             //见[c8051f040 datasheet]p259 T0方式2原理

                                            //图,SMOD0=0,方式1波特率为:1/32*T1CLK/(256-TH1)

                       
 TR1=1;                                  //TCON^6 timer1开关                   

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有