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 }