工程名稱:雙機(jī)通信
說明:此程序可以實(shí)現(xiàn)兩個(gè) 單片機(jī) 之間的相互通信;串口采用方式1
工作,10位異步接受和發(fā)送,波特率可變,由定時(shí)器1控制;且含有校驗(yàn)
程序說明:SCON:串口通信控制寄存器
SBUF:串行口的收發(fā)緩沖寄存器
PCON:電源管理寄存器。當(dāng)SMOD=1時(shí)串行口的波特率加倍。
IE:中斷允許寄存器。ES=1表示允許串行口中斷
TI:發(fā)送中斷標(biāo)志位,TI由硬件置位,置位表示一幀信息發(fā)送結(jié)束,TI在發(fā)送數(shù)據(jù)前必須由軟件清0
RI:接收中斷標(biāo)志位,RI由硬件置位,置位表示一幀信息接收結(jié)束,RI在接收數(shù)據(jù)前必須由軟件清0
*******************************************************************************************/
#include
#include "LCD12864.h"
unsigned long vo_num1=0;//接收到的頻率值
unsigned long vo_num3=0;// 接收到的失真度
unsigned int vo_num4=0;//緩存校驗(yàn)值
unsigned char vo_num2[8];//緩存我們串口接收到的數(shù)據(jù)
unsigned char m=0;
unsigned int buf;
unsigned int pf=0;//校驗(yàn)和
#define seg_c P2 //將數(shù)碼管的段顯示定義到P2口
#define bit_c P0 //將數(shù)碼管的位選擇定義到P0口
#define fosc 22118400 //定義晶體振蕩頻率
#define bps 9600 //定義我們要通訊的波特率
#define th1 256-(fosc/12/16/bps) //利用宏計(jì)算出我們要給定時(shí)器中賦什么樣的值才能滿足我們需要的波特率
//將0-F 查表 成我們鍵盤對(duì)應(yīng)的字符
unsigned char code seg[11]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//定義從0-9 所對(duì)應(yīng)的段碼
unsigned char num[8]={9,8,7,6,5,4,3,2}; //聲明8個(gè)顯示緩存 對(duì)應(yīng)我們數(shù)碼管的8個(gè)位
/**********************************************************************************
函數(shù)名稱:串口初始化函數(shù)
**********************************************************************************/
void serial_init (void) //在使用串口模式1 前要初始 化串口寄存器等...
{
SCON=0x50; //串口工作于方式1,10位異步接收/發(fā)送,波特率可變
TMOD=0X20; //因?yàn)槟J?用到了定時(shí)器1的自動(dòng)重裝模式,所以要這樣設(shè)置定時(shí)器
PCON=0X00; //為了讓通訊速率更快,設(shè)置SMOD=1 那么它所在的寄存器PC0N=0X80 ,串行口的波特率加倍。
TH1=th1; //將宏計(jì)算的定時(shí)器初值放到TH1中
TL1=th1;
TR1=1;//啟動(dòng)定時(shí)器來產(chǎn)生串口工作所需要的波特率
ES =1;//允許出串口中斷
EA=1; //打開總中斷允許位
}
/**********************************************************************************
函數(shù)名稱:串口發(fā)送數(shù)據(jù)函數(shù)
**********************************************************************************/
void putbyte(unsigned char byte)// 利用硬件串口方式1 發(fā)送一個(gè)字節(jié)數(shù)據(jù)
{
SBUF=byte;//將要發(fā)送的數(shù)據(jù)送到發(fā)送緩沖區(qū)域,系統(tǒng)自動(dòng)發(fā)送
while(!TI);//查詢是否發(fā)送結(jié)束 當(dāng)TI=1 代表發(fā)送結(jié)束
TI=0;//清發(fā)送結(jié)束位方便下一次發(fā)送
}
/**********************************************************************************
函數(shù)名稱:串口接收數(shù)據(jù)函數(shù)
說明:采用中斷方式接收數(shù)據(jù),串口中斷的服務(wù)號(hào)是4
**********************************************************************************/
//串口中斷服務(wù)函數(shù) 無論接收中斷或者發(fā)送中斷都能進(jìn)來
serial () interrupt 4
{
if(RI) //RI=1,表示一楨數(shù)據(jù)接收完
{
vo_num2[m]=SBUF;
m++;
// if(m>8)
// m=0;
}
RI=0; //RI清0之后才能接收到下一幀數(shù)據(jù)。
}
/**********************************************************************************
函數(shù)名稱:軟件延時(shí)函數(shù)
**********************************************************************************/
void delay(unsigned char ms) //軟件延遲函數(shù)
{
unsigned int a=0;
while(ms--)
{
for(a=0;a<10;a++);
}
}
/**********************************************************************************
函數(shù)名稱:顯示函數(shù)
說明:數(shù)碼管段選是P2口,位選是P0口。
**********************************************************************************/
void display(unsigned int dis)
{
unsigned char loop=0;
num[0]=10;
num[1]=10;
num[2]=10;
num[3]=dis/10000; //得到要顯示數(shù)據(jù)的萬位
num[4]=(dis%10000)/1000; //得到要顯示數(shù)據(jù)的千位
num[5]=(dis%1000)/100; //得到要顯示數(shù)據(jù)的百位
num[6]=(dis%100)/10; //得到要顯示數(shù)據(jù)的十位
num[7]=(dis%10); //得到要顯示數(shù)據(jù)的個(gè)位
for(loop=0;loop<8;loop++)
{
bit_c=~(0x01<
delay(6);
seg_c=0xff; //在這里加了這句話,消除鬼影
}
}
/**********************************************************************************
函數(shù)名稱發(fā)送校驗(yàn)函數(shù)
說明:
**********************************************************************************/
void check_transport( unsigned int buf)
{
do
{ pf=0x00; //校驗(yàn)和清零
putbyte(buf); //發(fā)送數(shù)據(jù)并求解校驗(yàn)和
pf=(pf+buf&0x01+buf&0x02+buf&0x04+buf&0x08+buf&0x10+buf&0x20+buf&0x40+buf&0x80);
//求解校驗(yàn)和
putbyte(pf); //發(fā)送校驗(yàn)和
} while(SBUF!=0);
}
/**********************************************************************************
函數(shù)名稱:接收校驗(yàn)函數(shù)
說明:
**********************************************************************************/
void check_receive()
{
while(1)
{
pf=0x00; //校驗(yàn)和清零
// vo_num4=SBUF;
// pf=pf+(vo_num4&0x01+vo_num4&0x02+vo_num4&0x04+vo_num4&0x08+vo_num4&0x10+vo_num4&0x20+vo_num4&0x40+vo_num4&0x80);
vo_num2[m]=SBUF;
pf=pf+( vo_num2[m]&0x01+vo_num2[m]&0x02+ vo_num2[m]&0x04+ vo_num2[m]&0x08+ vo_num2[m]&0x10+ vo_num2[m]&0x20+ vo_num2[m]&0x40+vo_num2[m]&0x80);
//求解校驗(yàn)和
if((SBUF^pf)==0x00) //判斷求出的校驗(yàn)和與接收到的校驗(yàn)和是否相等
{
putbyte(0x00);
m++;
break;
}
else
{
putbyte(0xff); //如果不相等。則發(fā)送ff
}
}//while(1)
}
/**********************************************************************************
函數(shù)名稱:主函數(shù)
說明:
**********************************************************************************/
void disp(void)
{
lcd_init(0);
refrash_charactor();
lcd_clear();
str_1="頻率: Hz";
str_2="失真度:0. ";
lcd_display(1,1,str_1);
lcd_display(1,2,str_2);
}
main()
{
unsigned char temp;
serial_init (); //在使用串口模式1 前要初始
disp();
while(1)
{
// putbyte(0xeb) ;
// putbyte(0x90) ;
// putbyte(0xaa) ;
// m=0;
// check_receive();
if(vo_num2[0]==0xeb&&vo_num2[1]==0x90&&vo_num2[2]==0xaa)
{ vo_num1=vo_num2[3]*256+vo_num2[4];//頻率
vo_num3=(vo_num2[5]*256+vo_num2[6])*10; //失真度
refrash_charactor(vo_num1,vo_num3);
lcd_display(4,1,freq);
lcd_display(6,2,dist);
m=0;
}
}//while(1)
}
上一篇:智能家居控制系統(tǒng)C程序
下一篇:單片機(jī)實(shí)現(xiàn)測溫電路
推薦閱讀
史海拾趣
除了關(guān)注經(jīng)濟(jì)效益外,Coors Components Inc公司還積極履行社會(huì)責(zé)任。公司積極參與公益事業(yè),為社會(huì)做出貢獻(xiàn);同時(shí),公司也注重環(huán)保和可持續(xù)發(fā)展,努力降低生產(chǎn)過程中的環(huán)境污染。這些舉措不僅提升了公司的品牌形象,還贏得了社會(huì)各界的廣泛贊譽(yù)。
以上是關(guān)于電子行業(yè)公司發(fā)展的通用框架,你可以根據(jù)這些框架來進(jìn)一步了解“Coors Components Inc”公司的具體發(fā)展故事。請(qǐng)注意,在編寫故事時(shí),應(yīng)確保所描述的事實(shí)準(zhǔn)確無誤,避免夸大或縮小事實(shí)。
近期,啟英泰倫完成了數(shù)千萬元的B++輪融資,由水木春錦資本、盛裕資本和自覺資本共同投資。這筆資金將主要用于產(chǎn)品的大規(guī)模量產(chǎn)和新產(chǎn)品的研發(fā),以進(jìn)一步加速啟英泰倫在智能語音芯片市場的布局。資本的注入不僅為公司的發(fā)展提供了強(qiáng)有力的支持,也反映了市場對(duì)啟英泰倫技術(shù)和市場前景的認(rèn)可。
面對(duì)日益嚴(yán)峻的環(huán)境問題,EPT積極響應(yīng)國家綠色發(fā)展的號(hào)召,開始探索和實(shí)踐綠色生產(chǎn)。公司引進(jìn)了一系列環(huán)保設(shè)備和工藝,實(shí)現(xiàn)了生產(chǎn)過程中的節(jié)能減排和資源循環(huán)利用。同時(shí),EPT還加強(qiáng)了對(duì)廢舊電池的回收和處理工作,以減少對(duì)環(huán)境的污染。這一舉措不僅展現(xiàn)了EPT對(duì)社會(huì)責(zé)任的擔(dān)當(dāng),也為其在電子行業(yè)中樹立了綠色發(fā)展的典范。
以上故事均基于EPT公司在電子行業(yè)發(fā)展的背景信息虛構(gòu)而成,旨在展現(xiàn)其發(fā)展歷程中的關(guān)鍵節(jié)點(diǎn)和亮點(diǎn)。請(qǐng)注意,這些故事并非真實(shí)事件,僅供參考。
隨著業(yè)務(wù)的不斷發(fā)展,川土微電子開始在全國范圍內(nèi)進(jìn)行戰(zhàn)略布局。公司不僅在上海設(shè)立了總部和研發(fā)中心,還在其他地區(qū)設(shè)立了辦事處和生產(chǎn)基地。此外,川土微電子還積極與多家封測廠合作建立了封測專線,確保了產(chǎn)品的質(zhì)量和供應(yīng)的穩(wěn)定性。
隨著市場競爭的加劇,Dawning意識(shí)到只有不斷創(chuàng)新才能在行業(yè)中立于不敗之地。公司加大了對(duì)研發(fā)的投入,聘請(qǐng)了一批在電子制造領(lǐng)域具有豐富經(jīng)驗(yàn)的專家。在專家團(tuán)隊(duì)的帶領(lǐng)下,Dawning成功開發(fā)出了多款具有自主知識(shí)產(chǎn)權(quán)的高精度電子產(chǎn)品,這些產(chǎn)品不僅在性能上領(lǐng)先同行,而且在價(jià)格上也更具競爭力。這些創(chuàng)新產(chǎn)品的推出,極大地提升了Dawning在市場上的競爭力。
隨著科學(xué)技術(shù)的快速發(fā)展,特別是數(shù)字技術(shù)及各種超大規(guī)模集成電路的廣泛應(yīng)用,電子裝備尤其是軍用電子裝備結(jié)構(gòu)越來越復(fù)雜,功能越來越完善,自動(dòng)化程度也越來越高。雖然電子系統(tǒng)的性能得到提高,但是對(duì)測試和維修保障也產(chǎn)生了測試流程復(fù)雜、測試時(shí)間 ...… 查看全部問答∨ |
|
Motorola 廉價(jià)單片機(jī)原理及應(yīng)用 書名:MOTOROLA J, K系列廉價(jià)單片機(jī)原理及應(yīng)用 作者:余永權(quán)/林偉 出版社:北京航空航天大學(xué)出版社 頁數(shù):217 出版日期:1998-12-1 簡介:單片機(jī)在工業(yè)控制、汽車、儀器、家用電器、玩具、計(jì)算機(jī)外部設(shè)備、航空航天、交通運(yùn)輸、通信等領(lǐng)域都有廣泛的 ...… 查看全部問答∨ |
|
如何用C/C++程序?qū)崿F(xiàn)撥通 sim300實(shí)驗(yàn)板 小弟剛找到份工作 接到一個(gè)任務(wù) BOSS給了塊SIM300實(shí)驗(yàn)板 讓我看AT命令 還讓我用C程序?qū)崿F(xiàn)撥通這個(gè)實(shí)驗(yàn)板 其實(shí)我還不是很明白我要做什么 又該是如何實(shí)現(xiàn)呢 望大蝦不惜賜教~… 查看全部問答∨ |
對(duì)LNA一竅不通,現(xiàn)在需要突擊做一個(gè)400MHZ~800MHZ的低噪放。求哪位大俠有GPS的有源模塊給點(diǎn)電路參考一下。… 查看全部問答∨ |
本帖最后由 ddllxxrr 于 2016-1-7 17:12 編輯 本站強(qiáng)薦:185娛樂x城.足球x真_人.彩票齊全x手機(jī)可投x注任何游戲. 首次開戶送10元.首存送58元.信譽(yù)絕對(duì)保證185.cc … 查看全部問答∨ |
本帖最后由 dontium 于 2015-1-23 13:22 編輯 你好,我們?cè)谟肨I控制芯片bq77910做實(shí)驗(yàn),我們?cè)趯?shí)驗(yàn)中遇到一些無法解決的問題:充電器檢測頭CHGST在電池電壓V > (欠壓保護(hù)值UV + 欠壓回滯點(diǎn)UVH)可以進(jìn)行充電器的檢測,從而使控制芯片bq77910從休 ...… 查看全部問答∨ |
為什么不能實(shí)現(xiàn)端口中斷觸發(fā)定時(shí)器開啟啊啊啊啊啊啊???? #include <msp430g2231.h> unsigned int a=0,p=1; void delay(int x) { int i,j; for(i=0;i<=x;i++) for(j=0;j<=x;j++); } void initial() { &nb ...… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 人形機(jī)器人馬拉松背后的思考,兆易創(chuàng)新如何賦能機(jī)器人產(chǎn)業(yè)
- 一種基于STM32的智能柜控制器設(shè)計(jì)
- 小型傾轉(zhuǎn)旋翼機(jī)的無刷直流電機(jī)驅(qū)動(dòng)器設(shè)計(jì)
- 超高速攝影機(jī)電控系統(tǒng)設(shè)計(jì)
- 基于GPS自動(dòng)授時(shí)的無線智能控制器的設(shè)計(jì)
- 基于PTR2000的無線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- OEM機(jī)器制造商利用仿真軟件提高效率
- 基于機(jī)器視覺的帶鋼焊縫定位
- 米爾RK3576核心板適配多種系統(tǒng),解鎖多樣化應(yīng)用
- 實(shí)時(shí)控制和通信領(lǐng)域的IT/OT融合如何推動(dòng)工業(yè)自動(dòng)化
- IXD0579M高壓側(cè)和低壓側(cè)柵極驅(qū)動(dòng)器提供緊湊型即插即用解決方案
- 如何讓自動(dòng)化領(lǐng)域的串口設(shè)備具備聯(lián)網(wǎng)能力?
- MBD應(yīng)用于霍爾組件位置選定
- 村田汽車和工業(yè)設(shè)備用PoC系統(tǒng)靜噪對(duì)策:難點(diǎn)及攻略全解析,別錯(cuò)過
- 智慧節(jié)點(diǎn)的遠(yuǎn)程運(yùn)動(dòng)控制實(shí)現(xiàn)可靠的自動(dòng)化
- Windows 11電腦USB-C接口功能混亂結(jié)束了 微軟:所有接口必須支持?jǐn)?shù)據(jù)、充電和顯示
- 傳言iOS 14瀏覽器將增添自動(dòng)翻譯 對(duì)手寫筆支持也更好
- 集中化趨勢明顯,汽車IC市場玩家靠什么發(fā)展
- 突破1400萬美元,我國汽車半導(dǎo)體業(yè)關(guān)鍵增長點(diǎn)有哪些?
- IAR為兆易創(chuàng)新RISC-V提供Embedded Workbench開發(fā)工具
- 兩個(gè)百億元工業(yè)項(xiàng)目同日落子武漢光谷
- STM32L0xx_HAL_Driver庫的使用——UART續(xù)
- STM32L0xx_Hal_Driver庫的使用--EXTI
- 帶你全面了解如今的中國制造
- 中國半導(dǎo)體存儲(chǔ)器產(chǎn)業(yè)競爭激烈,市場未來走向?qū)⑷绾危?/a>
- 三星SDS向越南CMC投資,計(jì)劃進(jìn)軍東南亞市場
- 電壓監(jiān)控模數(shù)轉(zhuǎn)換器電源域隔離設(shè)計(jì)
- 請(qǐng)教:有沒有提供SPI接口,可提供Slave模式的IC?
- 好動(dòng)人,怎么可以這么好聽......
- 操作系統(tǒng)中的進(jìn)程問題
- winCE5.0下串口程序無法接收數(shù)據(jù)!,
- 百變運(yùn)動(dòng)機(jī)器人攝像頭
- 物聯(lián)網(wǎng)的應(yīng)用領(lǐng)域有哪些?
- 3225無源晶振引腳定義
- ST FOC三電阻采樣如圖,對(duì)圖中所描述的話不理解?請(qǐng)大蝦現(xiàn)身!!謝謝
- 當(dāng)電視劇導(dǎo)演學(xué)了電子技術(shù)后---倍壓整流電路分析