C51編程經(jīng)驗三則在單片機的開發(fā)應用中,已逐漸開始引入高級語言,C語言就是其中的一種。用慣了匯編的人,總覺得高級語言“可控性”不好,不如匯編那樣隨心所欲。以下是筆者在C51編程中的幾點經(jīng)驗,希望對初學C51者有所幫助。一、C51熱啟動代碼的編制工業(yè)控制計算機,往往設有看門狗電路,看[詳細]
單片機執(zhí)行程序的過程,實際上就是執(zhí)行我們所編制程序的過程。即逐條指令的過程。計算機每執(zhí)行一條指令都可分為三個階段進行。即取指令-----分析指令-----執(zhí)行指令。取指令的任務是:根據(jù)程序計數(shù)器PC中的值從程序存儲器讀出現(xiàn)行指令,送到指令寄存器。分析指令階段的任務是:將指令寄存器中的指令操作碼取出[詳細]
1. 動手編碼之前,你需要對要編碼實現(xiàn)的解決方案有一個正式的或粗略的設計。永遠不要在沒有任何設計的前提下就開始編碼,除非所編代碼不重要。2. 優(yōu)秀的代碼文檔跟編程語言知識一樣重要。在代碼源文件中,為每個主要的代碼段添加注釋,解釋代碼的基本邏輯。最好注明程序的構建和修改日期,以及修改的原[詳細]
/* 名稱:用 ADC0808 控制 PWM 輸出說明:使用數(shù)模轉換芯片 ADC0808,通過調(diào)節(jié)可變電阻 RV1 來調(diào)節(jié)脈沖寬度,運行程序時,通過虛擬示波器觀察占空比的變化。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit CLK=P2^4; [詳細]
最近做畢業(yè)設計,需要用按鍵來觸發(fā)外部中斷。實驗的時候是正常的,但是換了個核心板以及用上自己做的PCB電路板后,出現(xiàn)了一些問題。問題如下:要求:將連接按鍵的IO口配置為上拉輸入,按鍵一端接IO口,一端接地,即當按鍵按下后,該IO口會產(chǎn)生一個下降沿,觸發(fā)下降沿中斷。問題:將相應的IO口配置好后,測了引[詳細]
按一下按鍵燈就亮,延時 10s 后自動滅。在亮燈期間再按一下鍵,燈立即就滅。用定時器及中斷實現(xiàn)。題目鏈接:http://zhidao.baidu.com/question/1302357964153805259.html提問者采納 2013-12-09 13:47LED EQU P3.3KEY EQU P3.7ORG 0000HLJMP STARTORG 000BHLJMP T0_INTORG 0030H;------------------------------[詳細]
/* 名稱:單片機與 PC 通信說明:單片機可接收 PC 發(fā)送的數(shù)字字符,按下單片機的K1 鍵后,單片機可向 PC 發(fā)送字符串。在 Proteus 環(huán)境下完成本 實 驗 時 , 需 要 安 裝 Virtual Serial Port Driver 和[詳細]
/* 名稱:ADC0809 數(shù)模轉換與顯示說明:ADC0809 采樣通道 3 輸入的模擬量,轉換后的結果顯示在數(shù)碼管上。*/#include<reg51.h>#define uchar unsigned char#define uint unsigned int//各數(shù)字的數(shù)碼管段碼(共陰)uchar code DSY_CODE[詳細]
1、EQU 指令用于將一個數(shù)值或寄存器名賦給一個指定的符號名。格式: 符號名 EQU 表達式符號名 EQU 寄存器名表達式必須是一個簡單再定位表達式。用 EQU 指令賦值以后的字符名,可以用作數(shù)據(jù)地址、代碼地址、位地址或者直接當做一個立即數(shù)使用。比如:s equ bx+simov cx,[s]那么上面兩句代碼相當于如下指令:mov[詳細]
在單片機中,常用到數(shù)字與字符的方法,在C中都是使用itoa函數(shù),C51也有這個函數(shù),但是,8051的RAM是很有限的,所以盡量避免使用int型,常用的是unsigned char。當需要轉換成字符串時用itoa的話,還是有點浪費。還是自力更生,自己寫了一個,代碼如下:typedef unsigned char BYTE;BYTE * ByteToStr(BYTE n){BYT[詳細]
關于程序的執(zhí)行,以前想的不多,沒有意識到一個程序在運行時,從哪里讀指令,數(shù)據(jù)又寫在哪里。最近在看CSAPP時這個念頭經(jīng)常在腦袋中晃蕩。從單片機上知道,在上電的那一刻,MCU的程序指針PC會被初始化為上電復位時的地址,從哪個地址處讀取將要執(zhí)行的指令,由此程序在MCU上開始執(zhí)行(當然在調(diào)用程序的 main之前[詳細]
最近參與了一個項目,需要用嵌入式匯編寫測試程序。匯編程序寫過,C程序也寫過,但是將它們混合起來寫還是第一次,完全沒有概念。只能上網(wǎng)找資料,自己慢慢摸索。自己一直用Windows操作系統(tǒng),但是我們的項目是在Linux系統(tǒng)上,這兩者的匯編語言系統(tǒng)是不同的,windows一直是Intel匯編,而Linux是At&T匯編。為[詳細]
在單片機應用系統(tǒng)的數(shù)據(jù)處理過程中,經(jīng)常會遇到小數(shù)的運算問題,如求解BCD的增量算式、線性化處理等。因此,需要用二進制數(shù)來表示小數(shù)。表示小數(shù)的方法一般有兩種,定點數(shù)和浮點數(shù)。定點數(shù)結構簡單,與整數(shù)的運算過程相同,運算速度快。但隨著所表示數(shù)的范圍的擴大,其位數(shù)成倍增加,給運算和存儲帶來不便,而且[詳細]
制作超聲波測距儀,是很多學生、單片機愛好者學習單片機動手實踐的一個實作項目,這款超聲波測距程序,針對目前比較廣泛使的HC-SR04超聲波模塊而設計的,這款1602顯示的超聲波測距距源程序,單片機是51系列單片機,超聲波測距模塊先用的是HC-SRO4 超聲波測距模塊,單片機的晶振是12M,接線:模塊TRIG接 P2.5 EC[詳細]
bit和sbit都是C51擴展的變量類型。bit和int char之類的差不多,只不過char=8位, bit=1位而已。都是變量,編譯器在編譯過程中分配地址。除非你指定,否則這個地址是隨機的。這個地址是整個可尋址空間,RAM+FLASH+擴展空間。bit只有0和1兩種值,意義有點像Windows下VC中的BOOL。sbit是對應可位尋址空間的一個位[詳細]
已知負跳邊脈沖從51單片機P3.3引腳輸入,且該脈沖數(shù)少于65535個,試利用/INT1中斷,統(tǒng)計輸入脈沖個數(shù)。脈沖數(shù)存內(nèi)RAM30H(低位)31H(高位),并調(diào)用數(shù)據(jù)處理子程序WORK和顯示子程序DIR(已知,可直接調(diào)用)顯示,要求用邊沿觸發(fā)方式。參考MCS-51單片機程序:org 000hljmp mainorg 013hljmp i_int1org 050hmai[詳細]
假設正脈沖寬度不超過定時器的值設T1方式1,利用門控位GATE1來啟動定時器。定時器的值×T即為脈沖寬度。 ORG 1000H &[詳細]
1. Brown-Out Reset掉電復位,或電源電壓跌落復位, 當輸入電壓VCC跌到某一門限時芯片復位The MCU is reset when the supply voltage VCC is below the Brown-Out Reset threshold voltageand the Brown-out Detector is enabled. The Brown-out threshold voltage is programmable.2. Totem-pole推拉輸出電路3. [詳細]
因為第一次接觸STM的單片機,各種寄存器和API都不熟悉,于是結合STM的庫函數(shù)和編程手冊對照理解。建立好工程之后,編寫main函數(shù)。1.不管哪種單片機,上電以后第一重要的事就是設置時鐘和初始化引腳。單看STM32F的時鐘:能作為STM32F103的系統(tǒng)時鐘的有三種,外部時鐘,內(nèi)部時鐘,PLL時鐘。跟蹤到SystemInit里面,[詳細]
1.意外中斷。是否打開了某個中斷,但是沒有響應和清除中端標志,導致程序一直進入中斷,造成死機假象。2. 中斷變量處理不妥。若定義某些會在中斷中修改的全局變量,這時要注意兩個問題:首先為了防止編譯器優(yōu)化中斷變量,要在這些變量定義時前加 volatile,其次在主循環(huán)中讀取中斷變量前應該首先關閉全局中[詳細]
Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved. 粵ICP備14043402號-4