自己刚入门PIC,24fj256ga108的单片机,我写了程序,控制8个继电器分别导通电路的,但是程序烧写到单片机中,无法使电路按照我要求导通。大神们看一下,是不是我程序出问题了。顺便麻烦看一下我是不是串口写错了,串口调试的时候没有反应。麻烦大神看一下我的工程文件有什么问题吗
#include <p24Fxxxx.h>
#include"serial.h"
unsigned char RxData;//这个数是从串口收到数据,可以判断这个数据,来决定开哪一个继电器
int main()
{
TRISB = 0x0000;
TRISC = 0X0000;
TRISD = 0x0000;
UART_Init();
while(1)
{ if(RxData==1)
{PORTB = 0xCDFF;
PORTD = 0xFFFF;
PORTC = 0xFFFF;
}
else if(RxData==2)
{ PORTB = 0xADFF;
PORTD = 0xFFFF;
PORTC = 0xFFFF;
}
else if(RxData==3)
{PORTB = 0xF5FF;
PORTD = 0xFFFF;
PORTC = 0xEFFF;
}
else if(RxData==4)
{ PORTB = 0xF5FF;
PORTD = 0xEFFF;
PORTC = 0xFFFF;
}
else if(RxData==5)
{ PORTB = 0xBBFF;
PORTD = 0xF7FF;
PORTC = 0xFFFF;}
else if(RxData==6)
{ PORTB = 0xBBFF;
PORTD = 0xFFFB;
PORTC = 0xFFFF;}
else if(RxData==7)
{PORTB = 0xFBFF;
PORTD = 0xDFFF;
PORTC = 0xFFFE;}
else if(RxData==8)
{ PORTB = 0xFBFF;
PORTD = 0xDFFF;
PORTC = 0xFFFD;}
}
}
下面是串口程序
#include <p24Fxxxx.h>
#include"serial.h"
void UART_Init(void)
{
TRISFbits.TRISF3=0;
TRISFbits.TRISF2=1;
U1STA=0x0400; //对发送机使能并对错误标志位清零,接受或者收到一个字符即产生//中断
U1MODE=0x8000; //允许串行口工作使能且设置BREGH=0模式 、8位数据无奇偶校验、一位停止位
U1BRG=50; //8M晶振且波特率设置为9600时,U1BRG设置值为51
IFS0bits.U1TXIF=0;
IFS0bits.U1RXIF=0;
IEC0bits.U1TXIE=1; //允许串行通讯发送中断使能
IEC0bits.U1RXIE=1;//允许串行通信接受中断
}
void __attribute__((interrupt))_U1RXInterrupt(void)
{
IFS0bits.U1RXIF=0;
RxData=U1RXREG;
}
此帖出自
小平头技术问答
你仿真看看,描述的太简单,不好分析。
proteus支持这个型号,可以在proteus中调试,不但方便,速度也快。
另外建议程序中不要直接对寄存器赋值,这样不好维护和修改,可以多使用位操作。PIC的头文件中已经定义了很多位变量,你可以打开看看。
一周热门 更多>