• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

pic24fj256ga108单片机程序编写问题,急急急

cccp1994 2017-02-14 浏览量:1380
自己写的程序,按要求本来是串口调试时,输入1 ,1路能够导通。但是不能达到要求。大神们看看,是不是我程序写错了,端口定义错了。
#include <p24Fxxxx.h>
#include"serial.h"

unsigned char RxData;//这个数是从串口收到数据,可以判断这个数据,来决定开哪一个继电器

int main()
{	
	TRISB = 0x0000;
    TRISC = 0X0000;
	TRISD = 0x0000;
	UART_Init();
	while(1)
	{   if(RxData==1)
       {LATB = 0xD5FF; 
		LATD = 0xFFFF;
       LATC = 0xFFFF;
 }                      
      else if(RxData==2)
      {LATB = 0xB5FF;
		LATD = 0xFFFF;
        LATC = 0xFFFF;
						}
     else if(RxData==3)
     {LATB = 0xF5FF;
    	LATD = 0xFFFF;
        LATC = 0xEFFF; 
                        }
   else if(RxData==4)

	  { LATB = 0xF5FF;
		LATD = 0xEFFF;
        LATC = 0xFFFF;
                        }
       else if(RxData==5)
	  { LATB = 0xBBFF;
		LATD = 0xF7FF;
        LATC = 0xFFFF;}
      else if(RxData==6)
	  { LATB = 0xBBFF;
		LATD = 0xFFFB;
        LATC = 0xFFFF;}
        else if(RxData==7)
	   {LATB = 0xFBFF;
		LATD = 0xDFFF;
        LATC = 0xFFFE;}
        else if(RxData==8)
      { LATB = 0xFBFF;
		LATD = 0xDFFF;
        LATC = 0xFFFD;}
 }   
	}
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 嗨,您的變數RxData是Char怎去判別整數型別呢?

    所以改為如下即可

    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;
        }
      }   
    }

    另外您是用中斷觸發的方式,所以後面那題同樣的問題,While裡面不用再給RxData賦值,因為中斷內就賦值了

    以上為解答

    • 发布于 2017-02-16
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 这是自己琢磨的串口程序,大家一并看看问题。程序能编译,烧写到单片机不能达到效果。

    #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;   
    

    • 发布于2017-02-14
    • 举报
    • 评论 1
    • 0
    • 0
gtrjolin1986 回复了 cccp1994 :可以在问答里直接编辑啊 回复

  • 你串口的中断程序感觉有问题,还有就是你尝试一下在后面加一个Delay试一试,看看有无现象


    • 发布于2017-02-14
    • 举报
    • 评论 1
    • 0
    • 0
cccp1994 回复了 chen0000009 :怎么加呢 回复

  • 有没有大神看看怎么解决,是不是我程序出问题了,串口程序还是主程序。求帮助
    • 发布于2017-02-14
    • 举报
    • 评论 0
    • 0
    • 0

cccp1994 回复了 Eagleson :我的程序是哪里出问题了?新人小白求指导 回复

cccp1994 回复了 heaton426 :是不是串口程序错了 回复

相关问题

问题达人换一批

pic24fj256ga108单片机程序编写问题,急急急