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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 30217|回復(fù): 1
收起左側(cè)

[討論]

[復(fù)制鏈接]
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;
//接收幀結(jié)構(gòu)
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ā)送幀結(jié)構(gòu)
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;   //接收幀結(jié)構(gòu)變量
pc_send_fr pdata ps_fr;   //發(fā)送幀結(jié)構(gòu)變量
bit serial0_recv_end = 0;  //接收完畢標(biāo)志位
bit serial0_send_end = 0;  //發(fā)送完畢標(biāo)志位
bit flag = 1;
uchar idata serv_data_count = 0;  //接收內(nèi)容字節(jié)計(jì)數(shù)器
uchar idata send_data_count = 0;  //發(fā)送內(nèi)容字節(jié)計(jì)數(shù)器
uchar idata serial0_recv_state = PC_RECV_IDEL;     //接收過程判斷標(biāo)志
uchar idata serial0_send_state = PC_SEND_IDEL;    //發(fā)送過程判斷標(biāo)志
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;   //從長度開始的計(jì)算累加和
   serial0_recv_state = PC_RECV_ADDR;
   pr_fr.rf_chsum = pr_fr.rf_chsum + tempSBUF;    
   break;             //軟件仿真時(shí),這個(gè)break開始就不是退出中斷程序了,不知程序轉(zhuǎn)哪里了
  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:    //接收到幀序號(hào)
   pr_fr.rf_num = tempSBUF; 
   pr_fr.rf_chsum = pr_fr.rf_chsum + tempSBUF;
   serial0_recv_state = PC_RECV_DATA;
   serv_data_count = 0x00;  //接收內(nèi)容字節(jié)計(jì)數(shù)器清零
   break;

  case PC_RECV_DATA:    //接收數(shù)據(jù)并算累加和
   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)
      {    //校驗(yàn)累加和,相同,則置接收完畢標(biāo)志位
      serial0_recv_end = 1;
      pr_fr.rf_chsum = 0x00;   

      }else 
       {   //校驗(yàn)錯(cuò)誤,清接累加和,以便下次接收
       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;     //計(jì)算發(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ā)送幀序號(hào)
    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ā)送內(nèi)容字節(jié)計(jì)數(shù)器
    break;
  
   case PC_SEND_DATA:    //發(fā)送內(nèi)容字節(jié),并計(jì)算累加和
    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ā)送完畢標(biāo)志位
    serial0_send_state = PC_SEND_IDEL;
    break;

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


總之程序非常怪異,不知道跑到哪里去了?希望回復(fù)能夠說的清楚一些 
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2010-9-14 14:07 | 顯示全部樓層

這個(gè)程序是干什么的?  運(yùn)行平臺(tái)是什么

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩快播电影网 | 日韩av在线一区二区 | 国产成人综合一区二区三区 | 啪啪av | 亚洲视频精品 | 日韩一区二区免费视频 | 日韩精品在线一区二区 | 一区二区成人 | 亚洲一区二区久久久 | 欧美电影免费观看高清 | 亚洲一区二区精品视频在线观看 | av网站免费观看 | 一区二区中文字幕 | 欧美在线视频一区二区 | 亚洲精品美女在线观看 | 色欧美综合 | 久久精品免费一区二区三 | 国产乱码精品1区2区3区 | 日日摸夜夜爽人人添av | 国产精品免费一区二区三区四区 | 人人插人人 | 激情五月激情综合网 | 国产激情一区二区三区 | 日本不卡在线视频 | 亚洲视频国产视频 | 国产黑丝av | 精品国产乱码久久久久久图片 | 日本成人午夜影院 | 国产午夜精品福利 | 一级黄色毛片免费 | 精品国产乱码一区二区三区 | 亚洲手机视频在线 | 在线观看成人av | 99国产精品久久久久久久 | 三级黄色大片网站 | 午夜视频一区二区 | 国产亚洲精品91 | 新91 | 午夜a v电影 | 亚洲综合在线视频 | 久久中文字幕视频 |