头像-70989

追梦的阿土哥如果你想要更好的,就得先让自己努力成为一个更好的人。

  • 辽宁省沈阳市
  • 单片机 嵌入式 DSP FPGA/CPLD EDA/PCB 模拟技术
  • 工控电子

个人成就

获得 8 次赞

帮助过9人

定时器1闪个灯也这么难?

最近碰到一个有趣的问题,想用PIC16F1828的定时器1来简单的记个时,到时间后让一个小灯翻转亮起来,现在问题就出现在这个小灯上~#include __CONFIG(0x0182); __CONFIG(0x38ff); #define uint unsigned int #define uchar unsigned char #define LED1 RC0 #define LED2 RC5 #define LED_TRI TRISC=0x00 void interrupt tmer1(void); char data1,data0,data2; void main() { LED_TRI; //设灯的管脚为输出模式 GIE=1; //开总中断 PEIE=1; //开外部中断 TMR1IE=1; //开定时器1中断 TMR1GIE=0; //关定时器1门控中断 TMR1IF=0; //清除定时器1标志位 TMR1GIF=0; TMR1H=0x3C; TMR1L=0xAF; T1CON=0x01; //开定时器1 T1GCON=0x00; data1=0; LED2=1; while(1); } void interrupt tmer1(void) { if(TMR1IF==1) { TMR1IF=0; TMR1H=0x3C; TMR1L=0xAF; data1++; if(data1==0x28) { data1=0; data2++; LED1=!LED1; LED2=!LED2; } } } 现在的现象是到时间后,LED2能正常的翻转闪烁,但是LED1却不能,感觉就是执行到那里后,直接跳过去了。LED1单独测试时没有问题的,如果把LED2放到while(1)里面翻转闪烁,LED1在中断里也是能正常的闪烁,真是奇了怪了,管脚的配置都没有问题,就是不能亮~ 希望大神来解释一下这种现象。

SPI双向通信时,主机收到的数据有问题!

     最近在做SPI的双向通信,采用两个PIC16F1828,现在的问题是从机能收到主机发送的数据,但是主机收到的从机发送的顺序却有问题。比如主机发送的数据是0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,从机能按顺序收到主机发送的数据。从机发送的数据是0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,但是主机收到的数据却是0x10,0x11,0x17,0x01,0x02,0x03,0x16,0x17。有时候主机收到的数据顺序又是正确的,不知道是什么原因,请大神指点指点~ 主机配置发送接收程序 void SPI_INIT(void)//SPI的配置 {   SPI_SCK_OUT;   SPI_SDO_OUT;    SPI_SDI_IN;   SPI_nSS_OUT;   ANSELB=0X00;   SSP1STAT=0X80;   SSPCON=0X32;   SPI_nSS=1;   INTCON=0XC0;   PIE1=0X08;//开MSSP中断   PIR1=0X00;//清零MSSP中断 } void SPI_WRITE(uchar data) {   uchar back;   SPI_nSS=0;   DELAY(20);   SSP1BUF=data;   back=SSP1BUF;   SPI_nSS=1;   DELAY(20); } //中断方式接收 void interrupt mssp(void) { if(SSP1IF) {   SSP1IF=0;   stage4=stage3;   stage3=SSPBUF;   if((stage4==0x10)&&(stage3==0x11))   {   begin=1;j=0;   }   if(begin==1)   {    receive_spi[j++]=stage3;    if(j==8)    {   begin=0;j=0;send=1;   } }}} 从机配置发送接收程序 void SPI_INIT(void) {      SPI_SCK_IN;      SPI_SDO_OUT;      SPI_SDI_IN;      SPI_nSS_IN;      ANSELB=0X00;      ANSELC=0X00;      SSP1STAT=0X00;      SSPCON=0X34;      INTCON=0XC0;      PIE1=0X08;//开MSSP中断      PIR1=0X00;//清零MSSP中断 } //从机SPI发送 void SPI_WRITE(uchar data) {      uchar back;      DELAY(20);      SSPBUF=data;      back=SSPBUF;      DELAY(20); } //中断方式接收 void interrupt mssp(void) {      if(SSP1IF)      {             SSP1IF=0;          stage4=stage3;          stage3=SSP1BUF;    if((stage4==0x00)&&(stage3==0x01))          {   begin=1;j=0;   }          if(begin==1)          {              receive[j++]=stage3;              if(j==8)           {   begin=0;j=0;send=1;   }          }}}

关于RS485通信的问题

     最近在做一个小项目的时候遇到一个问题,关于RS485的通信问题。      项目的要求是电脑端通过RS485总线向单片机发送指令,单片机收到指令后将采集的数据通过总线返回给电脑端。      现在遇到的问题是:电脑发送一回指令给单片机,单片机会一直返回数据给电脑,要是在总线上取出一个位置,然后将这一点用USB转串口连接到另一台电脑上,这时再从电脑端发指令给单片机,则单片机就是接一回指令返回一次数据。      在单片机的程序里,明确设定了返回数据的长度及时间,并按时清楚了返回的标志位,在实验室测试的时候并没有出现这种情况,到现在安装后才遇到这种情况。      请各位大神帮个忙,畅所欲言,不甚感激~