keil 使用筆記:在Memory窗口上輸入address_type:address才能看到正確地址的變量debug~perfermance analyzer加入要察看的模塊名稱,然后view~perfermance analyzer window 可以察看各個模塊運行時間①Display address_type:address B:Bit address C:Code Memory Bx:Code Bank D D:80H 命令可以查看特殊寄存器 data D I:0 命令可以查看內部RAM數據iData; D X:0 命令可以查看外部RAM數據xData; ②R1 //顯示R1 register ~R1 //顯示變量R1 R1 = R7 //對寄存器Rx操作R1 = --R7 R1 = 0x20 ③main //顯示main()的開始地址d main //顯示main()的代碼④向RAM.ROM中寫數據Enter data_type address_type:address expr,expr.... data_type:int char double float long E char data:0x20 1,2,3,4 //向data區0x20開始的地址寫1,2,3,4 變量放在RAM的30H,要把定義放在main前面!另外特別注意,內部RAM通常供C程序存放中間變量等,所以一定要看看編譯后的程序中是否存在存儲單元沖突的情況,比如如果程序中 使用了別的寄存器組的話,08-1FH單元就不能用了unsigned long data i _at_ 0x30
上傳時間: 2013-11-05
上傳用戶:dongqiangqiang
一、實驗目的1.掌握定時/計數器、輸入/輸出接口電路設計方法。 2.掌握中斷控制編程技術的方法和應用。3.掌握8086匯編語言程序設計方法。 二、實驗內容與要求 微機燈光控制系統主要用于娛樂場所的彩燈控制。系統的彩燈共有12組,在實驗時用12個發光二極管模擬。1. 基本要求:燈光控制共有8種模式,如12個燈依次點亮;12個燈同時閃爍等八種。系統可以通過鍵盤和顯示屏的人機對話,將8種模式進行任意個數、任意次序的連接組合。系統不斷重復執行輸入的模式組合,直至鍵盤有任意一個鍵按下,退出燈光控制系統,返回DOS系統。2. 提高要求:音樂彩燈控制系統,根據音樂的變化控制彩燈的變化,主要有以下幾種:第一種為音樂節奏控制彩燈,按音樂的節拍變換彩燈花樣。第二種音律的強弱(信號幅度大小)控制彩燈。強音時,燈的亮度加大,且被點亮的數目增多。第三種按音調高低(信號頻率高低)控制彩燈。低音時,某一部分燈點亮;高音時,另一部分點亮。 三、實驗報告要求 1.設計目的和內容 2.總體設計 3.硬件設計:原理圖(接線圖)及簡要說明 4.軟件設計框圖及程序清單5.設計結果和體會(包括遇到的問題及解決的方法) 四、設計原理我們以背景霓虹燈的一種顯示效果為例,介紹控制霓虹燈顯示的基本原理。設有一排 n 段水平排列的霓虹燈,某種顯示方式為從左到右每0.2 秒逐個點亮。其控制過程如下: 若以“ 1 ”代表霓虹燈點亮,以“ 0 ”代表霓虹燈熄滅,則開始時刻, n 段霓虹燈的控制信號均為“ 0 ”,隨后,控制器將一幀 n 個數據送至 n 段霓虹燈的控制端,其中,最左邊的一段霓虹燈對應的控制數據為“ 1 ”,其余的數據均為零,即 1000 … 000 。當 n 個數據送完以后,控制器停止送數,保留這種狀態(定時) 0.2 秒,此時,第 1 段霓虹燈被點亮,其余霓虹燈熄滅。隨后,控制器又在極短的時間內將數據 1100 … 000 送至霓虹燈的控制端,并定時 0.2 秒,這段時間,前兩段霓虹燈被點亮。由于送數據的過程很快,我們觀測到的效果是第一段霓虹燈被點亮 0.2 秒后,第 2 段霓虹燈接著被點亮,即每隔 0.2 秒顯示一幀圖樣。如此下去,最后控制器將數據 1111 … 111 送至 n 段霓虹燈的控制端,則 n 段霓虹燈被全部點亮。 只要改變送至每段霓虹燈的數據,即可改變霓虹燈的顯示方式,顯然,我們可以通過合理地組合數據(編程)來得到霓虹燈的不同顯示方式。 五、總體方案論證分析系統設計思路如下:1) 采集8位開關輸入信號,若輸入數據為0時,將其修改為1。確定輸入的硬件接口電路。采樣輸入開關量,并存入NUM的軟件程序段。2) 以12個燈依次點亮為例(即燈光控制模式M1),考慮與其相應的燈光顯示代碼數據。確定顯示代碼數據輸出的接口電路。輸出一個同期顯示代碼的軟件程序段(暫不考慮時隙的延時要求)。3) 應用定時中斷服務和NUM數據,實現t=N×50ms的方法。4) 實現某一種模式燈光顯示控制中12個時隙一個周期,共重復四次的控制方法。要求在初始化時采樣開關輸入數據NUM,并以此控制每一時隙的延時時間;在每一時隙結束時,檢查有無鍵按下,若是退出鍵按下,則結束燈光控制,返回DOS系統,若是其他鍵就返回主菜單,重新輸入控制模式數據。5) 通過人機對話,輸入8種燈光顯示控制模式的任意個數、任意次序連接組合的控制模式數據串(以ENTER鍵結尾)。對輸入的數據進行檢查,若數據都在1 - 8之間,則存入INBUF;若有錯誤,則通過屏幕顯示輸入錯誤,準備重新輸入燈光顯示控制模式數據。6) 依次讀取INBUF中的控制模式數據進行不同模式的燈光顯示控制,在沒有任意鍵按下的情況下,系統從第一個控制模式數據開始,順序工作到最后一個控制模式數據后,又返回到第一個控制模式數據,不斷重復循環進行燈光顯示控制。7) 本系統的軟件在總體上有兩部份,即主程序(MAIN)和實時中斷服務程序(INTT)。討論以功能明確、相互界面分割清晰的軟件程序模塊化設計方法。即確定有關功能模塊,并畫出以功能模塊表示的主程序(MAIN)流程框圖和定時中斷服務程序的流程框圖。 六、硬件電路設計 以微機實驗平臺和PC機資源為硬件設計的基礎,不需要外加電路。主要利用了以下的資源:1.8255并行口電路8255并行口電路主要負責數據的輸入與輸出,可以輸出數據控制發光二極管的亮滅和讀取乒乓開關的數據。實驗時可以將8255的A口、B口和一組發光二極管相連,C口和乒乓開關相連。2.8253定時/計數器8253定時/計數器和8259中斷控制器一起實現時隙定時。本設計的定時就是采用的t=N×50ms的方法,50ms由8253定時/計數器的計數器0控制定時,N是在中斷服務程序中軟件計時。8253的OUT0接到IRQ2,產生中斷請求信號。8253定時/計數器定時結束會發出中斷信號,進入中斷服務程序。3.PC機資源本設計除了利用PC機作為控制器之外,還利用了PC機的鍵盤和顯示器。鍵盤主要是輸入控制模式數據,顯示器就是顯示提示信息。 七、軟件設計 軟件主要分為主程序(MAIN)和中斷服務程序(INTT),主程序包含系統初始化、讀取乒乓開關、讀取控制模式數據以及按鍵處理等模塊。中斷服務程序主要是定時時間到后根據控制模式數據點亮相應的發光二極管。1.主程序主程序的程序流程圖如圖1所示。
上傳時間: 2014-04-05
上傳用戶:q986086481
《現代微機原理與接口技術》實驗指導書 TPC-H實驗臺C語言版 1.實驗臺結構1)I / O 地址譯碼電路如上圖1所示地址空間280H~2BFH共分8條譯碼輸出線:Y0~Y7 其地址分別是280H~287H、288H~28FH、290H~297H、298H~29FH、2A0H~2A7H、2A8H~2AFH、2B0H~2B7H、2B8H~2BFH,8根譯碼輸出線在實驗臺I/O地址處分別由自鎖緊插孔引出供實驗選用(見圖2)。 2) 總線插孔采用“自鎖緊”插座在標有“總線”區引出數據總線D7~D0;地址總線A9~A0,讀、寫信號IOR、IOW;中斷請求信號IRQ ;DMA請求信號DRQ1;DMA響應信號DACK1 及AEN信號,供學生搭試各種接口實驗電路使用。3) 時鐘電路如圖-3所示可以輸出1MHZ 2MHZ兩種信號供A/D轉換器定時器/計數器串行接口實驗使用。圖34) 邏輯電平開關電路如圖-4所示實驗臺右下方設有8個開關K7~K0,開關撥到“1”位置時開關斷開,輸出高電平。向下打到“0”位置時開關接通,輸出低電平。電路中串接了保護電阻使接口電路不直接同+5V 、GND相連,可有效地防止因誤操作誤編程損壞集成電路現象。圖 4 圖 55) L E D 顯示電路如圖-5所示實驗臺上設有8個發光二極管及相關驅動電路(輸入端L7~L0),當輸入信號為“1” 時發光,為“0”時滅6) 七段數碼管顯示電路如圖-6所示實驗臺上設有兩個共陰極七段數碼管及驅動電路,段碼為同相驅動器,位碼為反相驅動器。從段碼與位碼的驅動器輸入端(段碼輸入端a、b、c、d、e、f、g、dp,位碼輸入端s1、 s2)輸入不同的代碼即可顯示不同數字或符號。
上傳時間: 2013-11-22
上傳用戶:sssnaxie
串行編程器源程序(Keil C語言)//FID=01:AT89C2051系列編程器//實現編程的讀,寫,擦等細節//AT89C2051的特殊處:給XTAL一個脈沖,地址計數加1;P1的引腳排列與AT89C51相反,需要用函數轉換#include <e51pro.h> #define C2051_P3_7 P1_0#define C2051_P1 P0//注意引腳排列相反#define C2051_P3_0 P1_1#define C2051_P3_1 P1_2#define C2051_XTAL P1_4#define C2051_P3_2 P1_5#define C2051_P3_3 P1_6#define C2051_P3_4 P1_7#define C2051_P3_5 P3_5 void InitPro01()//編程前的準備工作{ SetVpp0V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=0; Delay_ms(20); nAddress=0x0000; SetVpp5V();} void ProOver01()//編程結束后的工作,設置合適的引腳電平{ SetVpp5V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=1;} BYTE GetData()//從P0口獲得數據{ B_0=P0_7; B_1=P0_6; B_2=P0_5; B_3=P0_4; B_4=P0_3; B_5=P0_2; B_6=P0_1; B_7=P0_0; return B;} void SetData(BYTE DataByte)//轉換并設置P0口的數據{ B=DataByte; P0_0=B_7; P0_1=B_6; P0_2=B_5; P0_3=B_4; P0_4=B_3; P0_5=B_2; P0_6=B_1; P0_7=B_0;} void ReadSign01()//讀特征字{ InitPro01(); Delay_ms(1);//----------------------------------------------------------------------------- //根據器件的DataSheet,設置相應的編程控制信號 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(20); ComBuf[2]=GetData(); C2051_XTAL=1; C2051_XTAL=0; Delay_us(20); ComBuf[3]=GetData(); ComBuf[4]=0xff;//----------------------------------------------------------------------------- ProOver01();} void Erase01()//擦除器件{ InitPro01();//----------------------------------------------------------------------------- //根據器件的DataSheet,設置相應的編程控制信號 C2051_P3_3=1; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); C2051_P3_2=0; Delay_ms(10); C2051_P3_2=1; Delay_ms(1);//----------------------------------------------------------------------------- ProOver01();} BOOL Write01(BYTE Data)//寫器件{//----------------------------------------------------------------------------- //根據器件的DataSheet,設置相應的編程控制信號 //寫一個單元 C2051_P3_3=0; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; SetData(Data); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); Delay_us(20); C2051_P3_4=0; Delay_ms(2); nTimeOut=0; P0=0xff; nTimeOut=0; while(!GetData()==Data)//效驗:循環讀,直到讀出與寫入的數相同 { nTimeOut++; if(nTimeOut>1000)//超時了 { return 0; } } C2051_XTAL=1; C2051_XTAL=0;//一個脈沖指向下一個單元//----------------------------------------------------------------------------- return 1;} BYTE Read01()//讀器件{ BYTE Data;//----------------------------------------------------------------------------- //根據器件的DataSheet,設置相應的編程控制信號 //讀一個單元 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=1; C2051_P3_7=1; Data=GetData(); C2051_XTAL=1; C2051_XTAL=0;//一個脈沖指向下一個單元//----------------------------------------------------------------------------- return Data;} void Lock01()//寫鎖定位{ InitPro01();//先設置成編程狀態//----------------------------------------------------------------------------- //根據器件的DataSheet,設置相應的編程控制信號 if(ComBuf[2]>=1)//ComBuf[2]為鎖定位 { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); } if(ComBuf[2]>=2) { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=0; C2051_P3_7=0; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); }//----------------------------------------------------------------------------- ProOver01();} void PreparePro01()//設置pw中的函數指針,讓主程序可以調用上面的函數{ pw.fpInitPro=InitPro01; pw.fpReadSign=ReadSign01; pw.fpErase=Erase01; pw.fpWrite=Write01; pw.fpRead=Read01; pw.fpLock=Lock01; pw.fpProOver=ProOver01;}
上傳時間: 2013-11-12
上傳用戶:gut1234567
TKS仿真器B系列快速入門
上傳時間: 2013-10-31
上傳用戶:aix008
CPU在處理某一事件時,發生了另一事件請求CPU迅速去處理。CPU暫時中斷當前的工作,轉去處理事件B。待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續處理事件A。這一處理過程稱為中斷。介紹用匯編和C語言兩語言的源程序,愿給大家帶來幫助。 前面我已經上傳了幾個程序,沒幾天卻失蹤了。但這次的不會失蹤,能保留上幾天。
上傳時間: 2014-12-31
上傳用戶:dianxin61
一個簡單好用的B+樹算法實現
上傳時間: 2015-01-04
上傳用戶:縹緲
一個用Basic實現的B-Tree算法
上傳時間: 2013-12-30
上傳用戶:ccclll
一個用Java applet實現的B-Tree算法
上傳時間: 2013-12-25
上傳用戶:qiao8960
java 版B+樹程序
上傳時間: 2015-01-06
上傳用戶:chenjjer