音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

串口為啥只收到兩個(gè)0,我想收到0-7

作者:chuandaoxy 欄目:單片機(jī)
串口為啥只收到兩個(gè)0,我想收到0-7
//代碼功能:從定義好的數(shù)組中,把數(shù)組的內(nèi)容0 1 2 3 4 5 6 7 ,發(fā)送到主機(jī)上//

#include<reg51.h>
#include<intrins.h>

#ifndef NULL
#define NULL ((void*)0L)
#endif

#define DB_MAXSIZE 0X08
int n=0;
#define   ON 0
#define  OFF 1


unsigned  CHAR db_head;
unsigned  CHAR db_tail;
unsigned  CHAR db_buffer[DB_MAXSIZE];

void debug_init(void);
void debug_output(void);
void debug_insert(unsigned CHAR  data*base, unsigned CHAR size);


sbit LED=P2^7;

/*
function:     debug_init
DESCRIPTION:  將串口設(shè)置位調(diào)試端口,把緩沖區(qū)指針設(shè)為0
parameters:   無(wú)
return:       無(wú)
*/

void debug_init(void)  /*SCON:   7    6    5    4    3    2    1    0   */
{                            /* SM0  SM1   SM2  REN  TB8  RB8  TI   RI  */
   SCON=0X40;                /*  0    1    0     0   0    0    0    0   */
                             /*方式1,8位UART工作方式,波特率可變 */
   
   
   
   
                 /*  TIMER1方式2自動(dòng)裝載8位計(jì)數(shù)器 | TIMER0方式0 13位計(jì)數(shù)器      */
   TMOD=0x20;    /*    TMOD:   7    6    5    4   |  3     2    1    0        */
                 /*          |GATE  C\T  M1   M0 | GATE  C\T   M1   M0|       */
                 /*            0    0    1    0      0    0     0    0        */
                   
   TH1=0xfd;
   TL1=0xfd;
   
   PCON=0;      /*PCON.7=0就是SMOD=0波特率不加倍*/
   
   TR1=1;       /*啟動(dòng)定時(shí)器1*/
   
   ET1=0;       /* IE.3(ET1)=0,定時(shí)器1作為波特率發(fā)生器使用時(shí)應(yīng)該禁止其產(chǎn)生中斷*/
   
   EA=1;        /*開(kāi)中斷*/
           
   ES=1;        /*IE.4(ES)=1,開(kāi)串口中斷*/
   
   db_head=db_tail=0;
}

/*
function:       debug_insert
DESCRIPTION:    把所指向的存儲(chǔ)區(qū)數(shù)據(jù)拷貝到緩沖區(qū)
parameters:     base- 指針,只想要拷貝數(shù)據(jù)的頭地址, size- 所要拷貝數(shù)據(jù)的數(shù)量
return:         無(wú)               

*/

void debug_insert(unsigned CHAR  data*base, unsigned CHAR size)
{
  bit sendit=0;                      /*標(biāo)志位,表明是否要進(jìn)行串行傳輸初始化*/
unsigned CHAR i=0;
  if (!size|| base==NULL){ return;}                           /*測(cè)試參數(shù)是否有效*/
  if (db_tail==db_head)
     {sendit=1;
}

while(db_tail!=db_head && n<size )  /*當(dāng)緩沖區(qū)有空間并且數(shù)據(jù)區(qū)還有數(shù)據(jù)時(shí)進(jìn)行拷貝*/
{
db_buffer[db_tail]=base[i];           /*拷貝當(dāng)前字節(jié)*/
   i++;
    db_tail++;                           /*移動(dòng)指針*/
if (db_tail==DB_MAXSIZE)             /*指針是否超出范圍*/
{
db_tail=0;
}
}
if (sendit)                           /*是否要傳輸一個(gè)字節(jié)*/
{
SBUF=db_buffer[db_head];

}
}


/* function:     debug_output
   DESCRIPTION:  串行口中斷服務(wù)程序,增加緩沖區(qū)指針,
                 如果頭指針不等于尾指針輸出下一個(gè)字節(jié)
   parameters:   無(wú)
   return:       無(wú)*/


void debug_output(void) interrupt 4
{
  RI=0;
  
  if (_testbit_(TI))
  db_head++;
  if (db_head==DB_MAXSIZE)
{
   db_head=0;
}
if (db_head!=db_tail)
   SBUF=db_buffer[db_head];

}



main ()
{
unsigned CHAR base[8];
unsigned CHAR data*ptr=base;
for(n=0;n<=7;n++) base[n]=n;

  debug_init();
while(1)
   {
    debug_insert(base,8);
   }
     }


2樓: >>參與討論
沈老
debug_insert 是干什么的
1>.先準(zhǔn)備好數(shù)據(jù)
2>.主程序中發(fā)第一個(gè)
3>.以后的由中斷發(fā)出,到個(gè)數(shù)到.
加;
for(n=0;n<=7;n++) db_buffer[n]=n;/一試


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
求助 哪位有atmega128的protel封裝啊
那位大俠知道帶地址選擇的IIC控制的電子音量控制芯片
有人用過(guò)中源的51編程器么?
請(qǐng)教各位:EM78P258,259單片機(jī)有無(wú)中斷優(yōu)先功能?
貼片電感是怎么制造的?
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)