|
|||||||||||
| 技術(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ī) |
//代碼功能:從定義好的數(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樓: | >>參與討論 |
| 作者: 沈老 于 2006/7/17 22:31:00 發(fā)布:
debug_insert 是干什么的 1>.先準(zhǔn)備好數(shù)據(jù) 2>.主程序中發(fā)第一個(gè) 3>.以后的由中斷發(fā)出,到個(gè)數(shù)到. 加; for(n=0;n<=7;n++) db_buffer[n]=n;/一試 |
|
|
|
| 免費(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) |