久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3928|回復: 1
打印 上一主題 下一主題
收起左側(cè)

請高手大俠們幫忙看下這個程序問題在哪?急~

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:46961 發(fā)表于 2012-12-3 18:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

我使用ATEMGA16A做控制,PB0接485的RE/DE控制端,串口調(diào)制助手發(fā)數(shù)據(jù),一個幀的格式是24是幀頭,2C是幀尾,把中間的數(shù)據(jù)(不定長)加起來,這其中不包括2C前一個字節(jié)的數(shù)據(jù)(校驗和)。最后發(fā)送校驗和與數(shù)據(jù)長給串口。PD0+PD1是RXD和TXD。現(xiàn)在的情況是單片機根本收不到幀頭。WHY?

程序如下:

// Target : M16
// Crystal: 1.0000Mhz

#include <iom16v.h>
#include <macros.h>


#define uchar unsigned char
#define uint unsigned int 

#define BAUD 4800
#define F_CPU 1000000 
#define RW PORTB0 

void delay(uint ms)
{
   uint l,j;
   for(j=0;j<ms;j++) 
   for(l=0;l<7373;l++); //延時1ms
}

void port_init(void) //端口初始化
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTB = 0x00;
 DDRB  = 0x01;
 PORTC = 0x00; //m103 output only
 DDRC  = 0xff;
 PORTD = 0xfd;
 DDRD  = 0xfe;
}

void uart_init(void) //串口初始化
{
UCSRB = 0x00; //接收發(fā)送中斷禁止
//  RXCIE    7 接收結(jié)束中斷使能
//  TXCIE    6 發(fā)送結(jié)束中斷使能
//  UDRIE    5 數(shù)據(jù)寄存器空中斷使能
//  RXEN     4 接收使能
//  TXEN     3 發(fā)送使能
//  UCSZ2    2 與UCSZ1 UCSZ0 結(jié)合確定字符長度,011為8位
//  RXB8     1 接收數(shù)據(jù)位8
//  TXB8     0 發(fā)送數(shù)據(jù)位8
 UCSRA = 0x00;//不倍速
//  RXC      7 接收結(jié)束標志位
//  TXC      6 發(fā)送結(jié)束標志位
//  UDRE     5 數(shù)據(jù)寄存器空標志位
//  FE       4 幀錯誤標志位,在寫UCSRA時必須寫0
//  DOR      3 數(shù)據(jù)溢出標志位,在寫UCSRA時必須寫0
//  PE       2 奇偶校驗錯誤標志位
//  U2X      1 倍數(shù)發(fā)送
//  MPCM     0 多處理器模式
 UCSRC|= (1<<URSEL) | (1 << UCSZ1) | (1 << UCSZ0);  //異步,數(shù)據(jù)格式8,沒有校驗,1位停止位
//  URSEL    7 寫UCSRC時,URSEL應設置為 1。UBRRH時為0
//  UMSEL    6 0異步1同步
//  UPM1     5  奇偶校驗模式,UPM1:UPM0,00禁止;10偶校驗;11奇校驗
//  UPM0     4
//  USBS     3 停止位選擇,0一位,1二位。
//  UCSZ1    2
//  UCSZ0    1
//  UCPOL    0 用于同步模式,異步清零
UBRRL = (F_CPU / BAUD / 16 - 1) % 256;    //波特率設置
UBRRH = (F_CPU / BAUD / 16 - 1) / 256;  

UCSRB|= (1 << RXCIE) | (1 << RXEN) | (1 << TXEN); //接收中斷使能,接收使能,發(fā)送使能
}

uint uart_receive (void) // 等待獲得一個字節(jié)數(shù)據(jù)
{  
   
 PORTB&=~(1<<RW);        
    while ( !(UCSRA & (1<<RXC)) );
 //UCSRA
 //Bit 7 – RXC: USART 接收結(jié)束,接收緩沖器中有未讀出的數(shù)據(jù)時 RXC 置位,否則清零。
 //Bit 6 – TXC: USART 發(fā)送結(jié)束,發(fā)送移位緩沖器中的數(shù)據(jù)被送出,且當發(fā)送緩沖器 (UDR) 為空時TXC 置位。
 //Bit 5 – UDRE: USART數(shù)據(jù)寄存器空UDRE標志指出發(fā)送緩沖器(UDR)是否準備好接收新數(shù)據(jù)。UDRE為1說明緩沖器為空,已準備好進行數(shù)據(jù)接收。
    //Bit 4 – FE: 幀錯誤
 //Bit 3 – DOR: 數(shù)據(jù)溢出
 //Bit 2 – PE: 奇偶校驗錯誤
 //Bit 1 – U2X: 倍速發(fā)送
 //Bit 0 – MPCM: 多處理器通信模式
 return UDR;
 
}
void init_devices(void)   //端口初始化
{
        //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
 uart_init();
 
 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 SEI();        //re-enable interrupts
}            
//*************串口發(fā)送字節(jié)數(shù)據(jù),調(diào)用前先使485的發(fā)送腳置高PB0,使用232串口的話,不必處理*********//
void uart_send(uint i)                
{                       
  PORTB|=(1<<RW);            //485發(fā)送使能
  while(!(UCSRA&(1<<UDRE))); //等待發(fā)送結(jié)束
  UDR=i;
  UCSRA|=0x40;               //清除發(fā)送結(jié)束標志位
  delay(50);
  PORTB&=~(1<<RW);           //485接收使能
  }
//*****************************************主程序*********************************************//
void main(void)
{
 uint sum=0,overflag=0;
 uint data_r1=0,data_r2=0,data0=0;  //參數(shù)初始化
 init_devices();                                  //接收、發(fā)送使能
 
 while(data0!=0x24)                             //檢查是否為幀頭          
 {
  data0=uart_receive();
 }
 
 while(data_r2!=0x2c)                         //檢查是否為幀尾
 {
  data_r2=uart_receive();
  sum=sum+data_r1;
  data_r1=data_r2;
  overflag=overflag+1;
 }
 overflag=overflag-1;
 sum=sum%0xff;
 uart_send(sum);
 uart_send(overflag);
}

發(fā)送數(shù)據(jù)格式為 24 01 02 03 2C,沒回數(shù)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:48720 發(fā)表于 2013-3-25 17:16 | 只看該作者

幫頂上!!

 

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩综合 | 久久久久久成人 | 日韩国产一区二区三区 | 国产精品一区二区在线播放 | 97视频久久 | 日本在线你懂的 | 久久精品日产第一区二区三区 | 免费看黄色小视频 | 久久国产精99精产国高潮 | www.99热| 日本在线视频一区二区 | 成人免费视频 | 成人久草 | 国产女人与拘做视频免费 | 日韩久久综合网 | 亚洲三级在线观看 | 久久99国产精品久久99果冻传媒 | 青青草精品视频 | 91精品一区二区三区久久久久 | 国产精品一区二区视频 | 成人午夜电影网 | 欧美成年人视频在线观看 | 久久精品小视频 | 51ⅴ精品国产91久久久久久 | 欧美成人在线影院 | 美女毛片免费看 | 成人在线播放网站 | 91在线一区 | 91久久精品国产91久久 | 国产精品一区二区欧美 | 亚洲精品成人网 | 成人午夜精品 | 日韩欧美福利视频 | 色综合欧美 | 欧美日韩国产综合在线 | 草草在线观看 | 欧美在线看片 | 一区二区三区四区在线 | 亚洲国产成人精品女人 | 天天天天天天天干 | 欧美日韩在线观看一区 |