//#include <p18F46K22.h>/*18F系列单片机头文件*/
#include <p18cxxx.h>
#pragma config FOSC = XT //外部晶振
#pragma config WDTEN = OFF //关闭 WDT
#pragma config XINST = OFF //指令集关
#pragma config LVP = OFF //低压编程
#define uchar unsigned char
#define uint unsigned int
#define LED LATD
uchar a;
void Interrupt_High(void);
void usart_init(void)
{
TRISCbits.TRISC7 = 1; // 设置串口
TRISCbits.TRISC6 = 0;
SPBRG = 25; // 波特率 4MHz 9600 N 8 1
RCSTAbits.SPEN = 1; // 串口使能
TXSTAbits.BRGH = 1; // 高速模式
TXSTAbits.SYNC = 0; // 异步模式
// TXSTAbits.TXEN = 1; // 发送允许
RCSTAbits.CREN = 1; // 允许接受
PIE1bits.RCIE = 1; // 接收中断使能
PIE1bits.TXIE = 0; // 发送中断禁止
}
//-------------------------------------------------------------------------------
// 高优先级中断向量
//-------------------------------------------------------------------------------
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
_asm
goto Interrupt_High //跳到中断程
_endasm
}
//-------------------------------------------------------------------------------
// 高优先级中断服务程序
//-------------------------------------------------------------------------------
#pragma interrupt Interrupt_High
void Interrupt_High(void)
{
if(PIR1bits.RCIF) //接收中断
{
LED=RCREG;
}
}
void main (void)
{
TRISD=0b00000000;
usart_init();
INTCONbits.PEIE = 1; //外设中断允许
INTCONbits.GIE = 1; //总中断允许
while(1)
{
}
}
这个程序就是用PORTD端口的8个led 显示串口助手发送的数据 在4520上经测试正常显示 在46k22上就不好用 很郁闷 |