📄 main.c
字号:
//ok
//此程序通过RS-232接口来完成计算机和单片机通信
//此程序首先发送测试数据55H,再通过中断实现数据的接收和发送
//程序的调试可以用"串口调试助手V2.1"辅助完成
#include "p18cxxx.h"
//#pragma config OSC = HS, OSCS = OFF
#pragma config OSC = XT, OSCS = OFF
#pragma config PWRT = ON
#pragma config WDTPS =512
#pragma config CCP2MX = ON
#pragma config MCLRE = OFF
#pragma config BOR = ON //RC2 OK
#pragma config BORV = 42
#pragma config WDT = ON
#pragma config LVP = OFF
extern void make_LED(void);
extern void make_MOS(void);
unsigned long temp_f;
unsigned float an0,an1,an2,an3,an4,an5,an6,an7,an8,an9,an10,an11;
union adres
{
unsigned int y;
unsigned char adre[2];
}adresult;
unsigned char buf_RCREG;
unsigned char temp8u;
void InterruptHandlerHigh(void);
//初始化程序
void RS232_initial(void)
{
SPBRG=25; //选择传输波特率为9600bps
TXSTA=0X04; //选择异步高速方式传输8位数据
RCSTA=0X80; //允许同步串行口工作
TRISC=0XC0; //将RC7,RC6设置为输入,断绝与外接电路的连接
BAUDCONbits.BRG16=0;
TXSTAbits.TXEN=1; //发送允许
RCSTAbits.CREN=1; //接受数据允许
PIE1bits.RCIE=1; //接收中断使能
INTCON=0XC0; //总中断和外围中断允许
}
//高优先级中断向量
#pragma code InterruptVectorHigh=0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptHandlerHigh //跳到中断程
_endasm
}
//高优先级中断服务程序
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
while(PIR1bits.RCIF==1) //若接收中断标志不为1,则为误操作,返回
{
buf_RCREG=RCREG; //接收命令
TXREG=0X55;
}
}
//主程序
void main()
{ TRISE=0;
PORTE=0;
TRISD=0;
PORTD=0;
TRISF=0xFF;
TRISA=0xFF; //设置为输入方式
RS232_initial(); //RS232初始
INTCONbits.PEIE=1; //外围中断允许
RCONbits.IPEN=1; //使能中断优先级
INTCONbits.GIE=1; //总中断允许
//TXREG=0X55; //发送数据55H进行测试
for(;;){
_asm CLRWDT _endasm
if(buf_RCREG!=0xff){
temp8u=buf_RCREG; //取命令,
temp8u&=0xF0;
switch(temp8u){
case 0x00: break;
case 0x20: make_LED();break;
case 0x30: make_LED();break; //50mA 输出
case 0x40: make_MOS();break;
case 0x50: make_MOS();break; //MOS 输出
}
buf_RCREG=0xff;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -