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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 30081|回復: 1
打印 上一主題 下一主題
收起左側

[討論]

[復制鏈接]
跳轉到指定樓層
樓主
ID:25976 發(fā)表于 2010-9-14 12:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <stc\STC10.h>
#include <intrins.h>
//#include "inc\serial.h"
#define MAX_LEN 80
#define FRAME_HEAD1 0x7e
#define FRAME_HEAD2 0x81

#define PC_RECV_IDEL 1
#define PC_RECV_HEAD 2
#define PC_RECV_LEN  3 
#define PC_RECV_ADDR 4
#define PC_RECV_TYPE 5
#define PC_RECV_NUM  6
#define PC_RECV_DATA 7
#define PC_SEND_IDEL  1
#define PC_SEND_HEAD  2
#define PC_SEND_LEN   3 
#define PC_SEND_ADDR  4
#define PC_SEND_TYPE  5
#define PC_SEND_NUM   6
#define PC_SEND_DATA  7
#define PC_SEND_CHSUM 8
sbit LC5520_CS = P2^7;
sbit LED_OUT = P1^7;

typedef unsigned char uchar;
typedef unsigned int uint;
//接收幀結構
typedef struct pc_recv_frame
{
uchar rf_len;
uint rf_addr;
uchar rf_type;
uchar rf_num;
uchar rf_dat[MAX_LEN];
uchar rf_chsum;
}pc_recv_fr;
//發(fā)送幀結構
typedef struct pc_send_frame
{
uchar sf_len;
uint sf_addr;
uchar sf_type;
uchar sf_num;
uchar sf_dat[MAX_LEN]; 
uchar sf_chsum;
}pc_send_fr;

pc_recv_fr pdata pr_fr;   //接收幀結構變量
pc_send_fr pdata ps_fr;   //發(fā)送幀結構變量
bit serial0_recv_end = 0;  //接收完畢標志位
bit serial0_send_end = 0;  //發(fā)送完畢標志位
bit flag = 1;
uchar idata serv_data_count = 0;  //接收內容字節(jié)計數器
uchar idata send_data_count = 0;  //發(fā)送內容字節(jié)計數器
uchar idata serial0_recv_state = PC_RECV_IDEL;     //接收過程判斷標志
uchar idata serial0_send_state = PC_SEND_IDEL;    //發(fā)送過程判斷標志
void init_system(void);
void reset (void);
void delay_ms(uint ms);
uchar read_data(uchar xdata *read_data_addr);

void main(void) 
{
init_system();
LED_OUT = 0;
ps_fr.sf_len = 0x06;
ps_fr.sf_addr = 0x03;
ps_fr.sf_type = 0x01;
ps_fr.sf_num = 0x01;
ps_fr.sf_dat[0] = 0x02;
ps_fr.sf_dat[1] = 0x03;  

  while(1){
     while(flag){
   SBUF = 0x00;
   flag = 0;
  }
  delay_ms(6000); 
  
  }
  
}

void init_system(void)
{ 
// SP = 0x60;
AUXR = AUXR | 0X42;
TMOD = 0x21;
TH1 = 0xE5;
TL1 = 0xE5;
TR1 = 1;
SCON = 0x50;
PCON = 0x80;
IE = 0x12;
IP = 0x10;
TH0 = 0xD8;
TL0 = 0xF0;
P0 = 0xff;
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
AUXR1 = 0x00;
LC5520_CS = 1;
ET0 = 0;
TR0 = 0;
ES = 1;
    EA = 1;
}

uchar read_data(uchar xdata *read_data_addr)
{ 
uchar c;
LC5520_CS = 0;
c = *read_data_addr;
LC5520_CS = 1;
return c;
}

//軟件看門狗
//void reset (void)
//{
//((void (code *) (void)) 0x0000) ();
//}



/*delay 1 ms*/
void delay_ms(uint ms)
{
    uint i;
    uchar j;
    for(i=0;i<ms;i++)
        for(j=0;j<100;j++) {
        _nop_();
    }
}
void serial_rec(void) interrupt 4 using 1
{
uchar tempSBUF;
if(RI)
{
RI = 0;
tempSBUF = SBUF;
switch(serial0_recv_state)
{
  case PC_RECV_IDEL:  
   if(tempSBUF == FRAME_HEAD1)  //幀頭為0x7e
    serial0_recv_state = PC_RECV_HEAD;
    break;
  case PC_RECV_HEAD:        //幀頭為0x81
   if(tempSBUF == FRAME_HEAD2) {
    serial0_recv_state = PC_RECV_LEN;
    pr_fr.rf_chsum = 0x00;    //清累加和
    LED_OUT = !LED_OUT;
    }
    break;
  case PC_RECV_LEN:        //接收到長度
   pr_fr.rf_len = tempSBUF;   //從長度開始的計算累加和
   serial0_recv_state = PC_RECV_ADDR;
   pr_fr.rf_chsum = pr_fr.rf_chsum + tempSBUF;    
   break;             //軟件仿真時,這個break開始就不是退出中斷程序了,不知程序轉哪里了
  case PC_RECV_ADDR:     //接收到地址
   pr_fr.rf_addr = tempSBUF;  
   serial0_recv_state = PC_RECV_TYPE;
   pr_fr.rf_chsum = pr_fr.rf_chsum + tempSBUF;
   
   break;
  case PC_RECV_TYPE:    //接收到類型
   pr_fr.rf_type = tempSBUF;
   serial0_recv_state = PC_RECV_NUM;
   pr_fr.rf_chsum = pr_fr.rf_chsum + tempSBUF;
   
   break;
  case PC_RECV_NUM:    //接收到幀序號
   pr_fr.rf_num = tempSBUF; 
   pr_fr.rf_chsum = pr_fr.rf_chsum + tempSBUF;
   serial0_recv_state = PC_RECV_DATA;
   serv_data_count = 0x00;  //接收內容字節(jié)計數器清零
   break;

  case PC_RECV_DATA:    //接收數據并算累加和
   if(serv_data_count < (pr_fr.rf_len-4))
    {
    pr_fr.rf_dat[serv_data_count] = tempSBUF;
    pr_fr.rf_chsum = pr_fr.rf_chsum + tempSBUF;
    serv_data_count++;
    }else
     {     //接收完畢后,還原接收初始狀態(tài)
     
     serial0_recv_state = PC_RECV_IDEL;
     if(pr_fr.rf_chsum == tempSBUF)
      {    //校驗累加和,相同,則置接收完畢標志位
      serial0_recv_end = 1;
      pr_fr.rf_chsum = 0x00;   

      }else 
       {   //校驗錯誤,清接累加和,以便下次接收
       pr_fr.rf_chsum = 0x00;
       }
     }
   break;
  default:      //還原接收初始狀態(tài),和累加和
   serial0_recv_state = PC_RECV_IDEL;
   pr_fr.rf_chsum = 0x00;
   break; 
}  
} else if(TI) 
  {
  TI = 0;
  switch(serial0_send_state)
  {
   case PC_SEND_IDEL:     //發(fā)送0x7e
    SBUF = FRAME_HEAD1; 
    serial0_send_state = PC_SEND_HEAD;
    break;
   case PC_SEND_HEAD:  
    SBUF = FRAME_HEAD2;  //發(fā)送0x81
    ps_fr.sf_chsum = 0x00;  //清發(fā)送累加和
    serial0_send_state = PC_SEND_LEN;
    break;
   case PC_SEND_LEN:     //發(fā)送長度
    SBUF = ps_fr.sf_len;
    ps_fr.sf_chsum = ps_fr.sf_chsum + ps_fr.sf_len;
    serial0_send_state = PC_SEND_ADDR;
    break;     //計算發(fā)送累加和
   case PC_SEND_ADDR:   //發(fā)送地址
    SBUF = ps_fr.sf_addr;
    ps_fr.sf_chsum = ps_fr.sf_chsum + ps_fr.sf_addr;
    serial0_send_state = PC_SEND_TYPE;
    break;
   case PC_SEND_TYPE:   //發(fā)送類型
    SBUF = ps_fr.sf_type;
    ps_fr.sf_chsum = ps_fr.sf_chsum + ps_fr.sf_type; 
    serial0_send_state = PC_SEND_NUM;
    break;
   case PC_SEND_NUM:   //發(fā)送幀序號
    SBUF = ps_fr.sf_num;
    ps_fr.sf_chsum = ps_fr.sf_chsum + ps_fr.sf_num; 
    serial0_send_state = PC_SEND_DATA;
    send_data_count = 0x00;   //清發(fā)送內容字節(jié)計數器
    break;
  
   case PC_SEND_DATA:    //發(fā)送內容字節(jié),并計算累加和
    if(send_data_count < (ps_fr.sf_len-4))
     {
     SBUF = ps_fr.sf_dat[send_data_count];
     ps_fr.sf_chsum = ps_fr.sf_chsum + ps_fr.sf_dat[send_data_count];
     send_data_count++;
     }else 
      {serial0_send_state = PC_SEND_CHSUM;}
    break;

    case PC_SEND_CHSUM:      //發(fā)送累加和
    SBUF = ps_fr.sf_chsum; 
    ps_fr.sf_chsum = 0x00;    //
    serial0_send_end = 1;  //置發(fā)送完畢標志位
    serial0_send_state = PC_SEND_IDEL;
    break;

   default:
    ps_fr.sf_chsum = 0x00;
    serial0_send_state = PC_SEND_IDEL;
    break;
  }
  }
}


總之程序非常怪異,不知道跑到哪里去了?希望回復能夠說的清楚一些 
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2010-9-14 14:07 | 只看該作者

這個程序是干什么的?  運行平臺是什么

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久中文免费视频 | 中文字幕国产视频 | 亚洲国产成人精品女人久久久 | 国产一二三区在线 | 亚洲女人天堂网 | 精品视频成人 | 亚洲综合小视频 | 狠狠狠干 | 一二三四在线视频观看社区 | 精品综合 | 日韩精品久久久 | 亚洲欧美中文日韩在线v日本 | 日韩精品免费 | 久久网亚洲 | 欧美日韩在线一区二区三区 | 日韩精品一区二区三区中文在线 | 亚洲一区二区三区四区五区午夜 | 国产精品视频在线观看 | 国产免费一区二区三区免费视频 | 亚洲综合一区二区三区 | 欧美伦理一区 | 亚洲成人一区二区 | 欧美一级免费看 | 国产精品视频一二三区 | 欧美成人精品一区二区男人看 | 亚洲免费婷婷 | 国产亚洲精品美女久久久久久久久久 | 成年视频在线观看福利资源 | 祝你幸福电影在线观看 | 精品一区二区三区电影 | 亚洲在线一区二区 | 四虎影视免费在线 | 国产黄色在线观看 | 亚洲第一视频 | 黄视频网站在线 | 欧洲妇女成人淫片aaa视频 | 四虎影院一区二区 | 久久综合888 | 成人一区二区视频 | 久久久一区二区三区四区 | 天堂一区二区三区 |