PIC18F

 1 #include<p18f6393.h>
 2 
 3 #define uchar unsigned char
 4 #define uint  unsigned int
 5 
 6 //函数声明
 7 void osc_init();//时钟初始化
 8 void uart_inter_init();//串口初始化
 9 void InterruptHandlerHigh();//中断函数
10 
11 
12 //时钟初始化,选择内部时钟
13 void osc_init()
14 {
15     OSCTUNE = 0x8f;//选择内部振荡器来源为8M INTOSC,最高频率8M
16     OSCCON = 0xff;//内部8M时钟,OSC2输出Fosc/4        
17 }
18 
19 
20 //串口初始化
21 void uart_inter_init()
22 {
23     //发送部分初始化
24     TRISCbits.RC6=1;
25     TRISCbits.RC7=1;
26     RCSTA1bits.SPEN=1;//此位置1,将TX1和RX1设置为CK1(时钟)和DT1(数据)线
27     
28     TXSTA1bits.CSRC=1;//主控模式
29     TXSTA1bits.SYNC=1;//同步模式
30     
31     //PIE1bits.TXIE=1;//如需要,则将此位置1
32     
33     BAUDCON1bits.SCKP=0;//空闲状态时钟为低电平
34     BAUDCON1bits.BRG16=0;//8位波特率发生器,仅SPBRG1
35     
36     SPBRG1 =0xcf;//设置传输波特率设置为9600bps,
37                 //8Mhz OSC 9600=FOSC/(4([SPBRG1] + 1)),
38                 //SPBRG1=207 11101111
39     TXSTA1bits.TXEN=1;//使能发送
40     
41     //接收部分初始化
42     RCSTA1bits.SREN=0;//清零SREN
43     RCSTA1bits.CREN=0;//清零CREN
44                       //若SREN和CREN均被置1,则CREN具有优先权
45     //RCSTA1bits.SREN=1;//置1 SREN
46     RCSTA1bits.CREN=1;//置1 CREN
47                       //若SREN和CREN均被置1,则CREN具有优先权
48                       
49     PIE1bits.RCIE=1//若需要中断,将此位置1,接收完后将产生一个中断
50 
51     //INTCONbits.GIE=1;
52     //INTCONbits.PEIE=1;//若要使用中断,确保此两位为1                      
53 }
54 
55 #pragma code InterruptVectorHigh=0x08//高优先级中断向量
56 void InterruptVectorHigh(void)
57 {
58     _asm
59     goto InterruptHandlerHigh         //跳到中断程
60     _endasm
61 }
62 
63 //高优先级中断服务程序
64 #pragma code
65 #pragma interrupt InterruptHandlerHigh
66 void    InterruptHandlerHigh ()
67 {
68     while(PIR1bits.RCIF==1)        //若接收中断标志不为1,则为误操作,返回
69     {
70         TXREG1=RCREG1;        //将接收到的数据放入发送寄存器,并启动发送 
71     }
72 }
73 
74 void main()
75 {
76     osc_init();
77     uart_init();
78     TXREG1=0x55;////将数据装入TXREG1寄存器,启动发送
79     for(;;);
80 }

 

posted @ 2016-02-26 00:32  冷冷北极  阅读(450)  评论(0编辑  收藏  举报