proteus單片機(jī)pcbarm實驗報告_第1頁
proteus單片機(jī)pcbarm實驗報告_第2頁
proteus單片機(jī)pcbarm實驗報告_第3頁
proteus單片機(jī)pcbarm實驗報告_第4頁
proteus單片機(jī)pcbarm實驗報告_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 目錄實驗一、單片機(jī)間的多機(jī)通信0實驗二、I2C總線應(yīng)用技術(shù)8實驗三、層次原理圖設(shè)計12實驗四、元件封裝的創(chuàng)建15實驗五、自動布局17實驗六、開關(guān)控制LED21實驗七、中斷計數(shù)器24實驗八、UART29實驗一、單片機(jī)間的多機(jī)通信(1) 實驗題目采用C語言實現(xiàn)單片機(jī)間的多機(jī)通信。實現(xiàn)內(nèi)容:三個51單片機(jī)進(jìn)行多機(jī)通信。一個單片機(jī)用于溫度的采集(可采用可變電阻模擬溫度值),一個單片機(jī)用于控制8個LED燈循環(huán)顯示,顯示的時間間隔從主機(jī)中獲得,主機(jī)用于發(fā)送溫度的大小值及循環(huán)顯示的時間給從機(jī)。(2) 實驗?zāi)康膌 掌握proteus和軟件環(huán)境keilC的聯(lián)機(jī)調(diào)試過程l 掌握基于ARM c編程基礎(chǔ)(3) 實驗

2、設(shè)備1.Proteus 8 Professional 仿真開發(fā)環(huán)境;2.Keil uVision4(4) 實驗步驟 1.1打開Proteus 8,選擇isis繪制電路圖,點擊p添加元件AT89C51, BUTTON, CAP, CAP-ELEC, CRYSTAL, RES.1.2繪制電路圖如圖所示:2.1打開Keil uVision5,new project和new file 2.2編寫代碼:(c語言)/*實驗一*主機(jī)*發(fā)送循環(huán)顯示時間和溫度值給從機(jī)*/#include#include#define _SUCC_ 0x0f/數(shù)據(jù)傳送成功#define _ERR_0xf0/數(shù)據(jù)傳送失敗#defi

3、ne uchar unsigned char#define uint unsigned intuint Time=0,1,2,3,4,5,6,7;/循環(huán)顯示時間間隔(s)uint T = 22,33,66,77,88,99;sbit KEY1=P33;sbit KEY2=P35;uchar count =0;/延時1ms函數(shù)void delay_1ms(uint t) uint y; while(t-)for(y=110;y0;y-);/串口初始化函數(shù)void serial_init() TMOD=0x20; /定時器1工作于方式2 TH1=0xfd; TL1=0xfd; /波特率為9600

4、PCON=0; SCON=0xd0;/串口工作于方式3 TR1=1;/開啟定時器 TI=0; RI=0;/發(fā)送數(shù)據(jù)函數(shù)void SEND_data(uint *Buff) TI=0; /發(fā)送數(shù)據(jù)長度 TB8=0;/發(fā)送數(shù)據(jù)幀 P2 = Buffcount; SBUF=Buffcount; while(!TI); TI=0; count+; count=count%5;/向指定從機(jī)地址發(fā)送數(shù)據(jù)void ADDR_data(uchar addr, uint *Buff)uchar temp=0xff; while(temp!=addr) /主機(jī)等待從機(jī)返回其地址作為應(yīng)答信號 TI=0;/發(fā)送從機(jī)地

5、址TB8=1;/發(fā)送地址幀SBUF=addr;while(!TI);TI=0; RI=0;while(!RI);temp=SBUF;RI=0; SEND_data(Buff); /main函數(shù)void main() serial_init(); while(1) if(KEY1=0) delay_1ms(5); if(KEY1=0) while(!KEY1);ADDR_data(0x01,Time); if(KEY2=0) delay_1ms(5); if(KEY2=0) while(!KEY2);ADDR_data(0x02,T); /*實驗一*從機(jī)1*接收主機(jī)發(fā)送的溫度值*/#includ

6、e#include#include#define addr 0x02/從機(jī)2的地址#define _SUCC_ 0x0f/數(shù)據(jù)傳送成功#define _ERR_ 0xf0/數(shù)據(jù)傳送失敗#define uint unsigned int #define uchar unsigned charunsigned char Buff20;/數(shù)據(jù)緩沖區(qū)uchar flag = 0; /請求標(biāo)志sbit cs = P10;sbit clk = P11;sbit dio = P12;/串口初始化函數(shù)void serial_init() TMOD=0x20; /定時器1工作于方式2 TH1=0xfd; TL1

7、=0xfd; /波特率為9600 PCON=0; SCON=0xd0; /串口工作于方式3 TR1=1; /開啟定時器 TI=0; RI=0;/-/延時/-void delay(uint x )uint i;while(x-) for(i = 0;i 120; i+);/-/得到ad轉(zhuǎn)結(jié)果/-uchar get_ad_result() uchar i,dat1 = 0,dat2 = 0;cs = 0;clk=0;dio = 1;_nop_();_nop_();clk = 1;_nop_();_nop_();clk = 0;dio = 1;_nop_();_nop_();clk = 1;_nop

8、_();_nop_();clk=0 ;dio = 0;_nop_();_nop_();clk=1 ;dio = 1;_nop_();_nop_();clk=0;dio = 1;_nop_();_nop_();for(i= 0;i8;i+) clk=1;_nop_();_nop_();clk=0;_nop_();_nop_();dat1 = dat11|dio;for(i= 0;i8;i+)dat2 = dat2 |(uchar)(dio)i); clk=1;_nop_();_nop_();clk=0;_nop_();_nop_();cs =1;return (dat1 = dat2)? dat

9、1:0;/-/主函數(shù)/-void main()uint i = 0 ,j=0;uchar temp = 0,temp2 = 0;uchar aa = 0xff; serial_init(); while(1) SM2 = 1; /接收地址幀 aa = 0xff; while(aa!=addr) /從機(jī)等待主機(jī)請求自己的地址 RI=0; while(!RI)temp = get_ad_result();/溫度采集結(jié)果if(temp != temp2)P2 = temp;temp2 = temp; aa=SBUF; RI=0; TI=0; /一旦被請求,從機(jī)返回自己地址作為應(yīng)答,等待接收數(shù)據(jù) TB

10、8=0; SBUF=addr; while(!TI); TI=0; SM2=0; /接收數(shù)據(jù)幀RI=0; while(!RI); Buffi=SBUF; /數(shù)據(jù)幀 RI=0; P2 = Buffi;/查看接收到的數(shù)據(jù)/*實驗一*從機(jī)2*接收主機(jī)發(fā)送的循環(huán)顯示時間*/#include#include#include#define addr 0x01/從機(jī)2的地址#define _SUCC_ 0x0f/數(shù)據(jù)傳送成功#define _ERR_ 0xf0/數(shù)據(jù)傳送失敗#define uint unsigned int #define uchar unsigned charuint code sTabl

11、e=0,10,20,40,60,80,100,150;uint Buff20;/數(shù)據(jù)緩沖區(qū)uchar light = 0x00;uint speed = 0;uint tcount = 0;/串口初始化函數(shù)void serial_init() TMOD=0x20; /定時器1工作于方式2 TH1=0xfd; TL1=0xfd; /波特率為9600 PCON=0; SCON=0xd0; /串口工作于方式3 TR1=1; /開啟定時器 TI=0; RI=0;/-/延時/-void T0_INT() interrupt 1 if(tcount+ speed) return;tcount = 0;P1

12、 = light;light = _crol_(light , 1);/-/主函數(shù)/-void main() uint i = 0 ,j=0;uint m; uchar aa = 0xff;serial_init();IE = 0X82;TR0 = 1; while(1) SM2=1; /接收地址幀aa=0xff; while(aa!=addr) /從機(jī)等待主機(jī)請求自己的地址 RI=0; while(!RI); aa=SBUF; RI=0; TI=0; /一旦被請求,從機(jī)返回自己地址作為應(yīng)答,等待接收數(shù)據(jù) TB8=0; SBUF=addr; while(!TI); TI=0; SM2=0; /

13、接收數(shù)據(jù)幀RI=0; while(!RI); m=SBUF; /數(shù)據(jù)幀 RI=0; speed = sTablem; P2=m; /查看接收到的數(shù)據(jù)light = 0x01; 2.3 compile file,生成 .HEX文件(5) 實驗小結(jié)本次實驗,實驗二、I2C總線應(yīng)用技術(shù)(1) 實驗題目實驗題目:采用C語言完成I2C的通信。實現(xiàn)內(nèi)容:放置兩個I2C芯片,一個是24C01存儲器,一個是24C02,分別向兩個芯片中寫入016,1733。然后讀出相加并將值寫入單片機(jī)相關(guān)單元。(2) 實驗?zāi)康膌 掌握proteus和軟件環(huán)境keilC的聯(lián)機(jī)調(diào)試過程(3) 實驗設(shè)備1.Proteus 8 Pro

14、fessional 仿真開發(fā)環(huán)境;2.Keil uVision5(4) 實驗步驟 1.1打開Proteus 8,選擇isis繪制電路圖,點擊p添加元件AT89C51, BUTTON, CAP, CAP-ELEC, CRYSTAL, RES.1.2繪制電路圖如圖所示:2.1打開Keil uVision5,new project和new file 2.2編寫代碼:(c語言)/-/實驗二、I2C總線應(yīng)用技術(shù)/采用C語言完成I2C的通信。/實現(xiàn)內(nèi)容:放置兩個I2C芯片,一個是24C01存儲器,一個是24C02,/分別向兩個芯片中寫入016,1733。然后讀出相加并將值寫入單片機(jī)相關(guān)單元。/-#incl

15、ude#include#define uchar unsigned char#define uint unsigned int #define NOP4()_nop_();_nop_();_nop_();_nop_();sbit SCL = P30;sbit SDA = P31;uchar *ptr=0x30; /保存相加結(jié)果的地址/-/延時函數(shù)/-void delayms(uint x)uchar i;while (x-)for(i=0;i120;i+);/-/開始/-void start() SDA = 1; SCL = 1; NOP4(); SDA = 0; NOP4(); SCL =0

16、;/-/停止/-void stop() SDA = 0; SCL =0 ;NOP4();SCL = 1; NOP4(); SDA = 1; /-/寫完等待從器件應(yīng)答/-bit ACK(void) uchar i; SCL = 1; NOP4(); i = SDA; SCL = 1; NOP4(); SCL = 0;if(i=1) return 0; else return 1;/-/讀完發(fā)送停止讀的信號/-void NO_ACK() SDA = 1; SCL = 1; NOP4(); SCL = 0;SDA = 0;/-/寫字節(jié)/-void I2C_writebyte(uchar d) uin

17、t i; for(i=0;i8;i+) d = 1;SDA = CY;_nop_();SCL = 1;NOP4();SCL = 0; ACK();/-/讀字節(jié)/-uchar I2C_readbyte() uchar i , d; for(i=0;i8;i+) SCL = 1;d = 1;d |=SDA;SCL = 0; return d;/-/寫地址及數(shù)據(jù)/-void I2C_write_addr(uchar sl, uchar addr, uchar dat) start();I2C_writebyte(sl);I2C_writebyte(addr);I2C_writebyte(dat);s

18、top();delayms(10);/-/讀當(dāng)前地址的數(shù)據(jù)/-uchar I2C_read_current(uchar s)uchar d; start();I2C_writebyte(s+0x01);d = I2C_readbyte();NO_ACK();stop();return d;/-/讀指定地址的數(shù)據(jù)/-uchar I2C_read_random(uchar sl,uchar addr)uchar d; start();I2C_writebyte(sl);I2C_writebyte(addr);d = I2C_read_current(sl);return d;/-/主函數(shù)/-voi

19、d main() uchar i;uint dat1=0;uint dat2=17;uchar sl=0xa0,0xaE;for(i = 0;i 16; i+)I2C_write_addr(sl0,i,dat1);I2C_write_addr(sl1,i,dat2);dat1+;dat2+;for(i = 0;i 16; i+)dat1=I2C_read_random(sl0,i);dat2=I2C_read_random(sl1,i);dat2 = dat2+dat1;*ptr = dat2;P2 = dat2;delayms(100);ptr+;while(1);2.3 compile f

20、ile,生成 .HEX文件2.4proteus下運(yùn)行仿真,暫停,查看cpu內(nèi)存:(6) 實驗小結(jié)本次實驗?zāi)康?掌握I2C總線應(yīng)用技術(shù),用單片機(jī)通過總線控制2塊I2C芯片。難點是通過程序模擬I2C的時序,開始、應(yīng)答、傳送字節(jié)。但一條總線掛了多個I2C芯片時,需要設(shè)定每個芯片的地址,主機(jī)在發(fā)送的幀中包含地址信息(A2A1A0).實驗三、層次原理圖設(shè)計(1) 實驗題目完成P126的電路圖設(shè)計。要求采用層次電路圖的方式進(jìn)行設(shè)計,并進(jìn)行電氣規(guī)則檢查,生成元件報表、網(wǎng)絡(luò)表。(2) 實驗?zāi)康膌 掌握proteus層次原理圖設(shè)計(3) 實驗設(shè)備1.Proteus 8 Professional 仿真開發(fā)環(huán)境;(

21、4) 實驗步驟 原電路原理圖1. 創(chuàng)建子電路經(jīng)過分析,決定對選取其中的一部分電路作為子電路進(jìn)行層次設(shè)計。使用子電路工具建立層次圖。2.將光標(biāo)放置在子圖上,點右鍵,并選擇菜 單命令“Goto Child Sheet”(默認(rèn)組合鍵為 “Ctrl+C”),這時ISIS加載一空白的子圖頁3. 編輯子電路4.子電路編輯完后,選擇菜單命令【Design】 【Goto Sheet】,這時出現(xiàn)如圖8-50所示對 話框,選擇“Root sheet1”,然后單擊“OK” 按鈕,即使ISIS回到主設(shè)計圖頁。5. 電氣規(guī)則檢查6. 生成網(wǎng)絡(luò)表。(5) 實驗小結(jié)本次實驗,ISIS支持層次設(shè)計。對于一個較大、較復(fù)雜的電路

22、圖,不可能一次完成,也不可能將這個電路圖畫在一張圖紙上,更不可能由一個人單獨(dú)來完成。利用層次電路圖可以大大提高設(shè)計速度,也就 是將這種復(fù)雜的電路圖根據(jù)功能劃分為幾個模塊,由不同的人員來分別完成各個模塊,做到多層次并行設(shè)計。實驗四、元件封裝的創(chuàng)建(1) 實驗題目完成實驗二的PCB設(shè)計,要求進(jìn)行元件的布局、手工布線。(2) 實驗?zāi)康膌 掌握proteus和軟件環(huán)境keilC的聯(lián)機(jī)調(diào)試過程(3) 實驗設(shè)備1.Proteus 8 Professional 仿真開發(fā)環(huán)境;(4) 實驗步驟1. 實驗二電路原理圖2. 生成網(wǎng)絡(luò)表3. 在ARES中導(dǎo)入網(wǎng)絡(luò)表文件。4. 在自動布局之前需要先畫一個板框。在ARE

23、S左 側(cè)的工具箱中選擇 ,從主窗口底部左下角下拉 列表框中選擇“Board Edge”(黃色),在適當(dāng)?shù)奈恢?畫一個矩形,作為板框。5. 自動布局6. 手工布線。(6) 實驗小結(jié)Proteus軟件提供自動布局和手工布局兩種方式。在進(jìn) 行布局時,推薦使用自動布局和手工布局相結(jié)合的方式, 即先使用自動布局,然后進(jìn)行手工調(diào)整實驗五、自動布局(1) 實驗題目完成實驗一的PCB設(shè)計。要求進(jìn)行元件的布局、自動布線。(2) 實驗?zāi)康膌 掌握proteus和軟件環(huán)境keilC的聯(lián)機(jī)調(diào)試過程(3) 實驗設(shè)備1.Proteus 8 Professional 仿真開發(fā)環(huán)境;(4) 實驗步驟1. 實驗一電路原理圖:把

24、單片機(jī)的時鐘復(fù)位電路設(shè)計成子電路 2. 為元器件指定相應(yīng)的封裝。2.1元件封裝的創(chuàng)建本次實驗用到的8段數(shù)碼管在package library 中找不到封裝,自己畫一個該器件的封裝并添加進(jìn)user庫。2.2 給數(shù)碼管指定自己的封裝3. 檢查電器規(guī)則4. 生成元件列表(略)5. 自動布局6. 手動調(diào)整7. 自動布線(5) 實驗小結(jié)Proteus ARES基于網(wǎng)格的布線既靈活又快速,并能 使用任何導(dǎo)線密度或孔徑寬度,以90或45在 18層上布線。在電子世界最近的PCB軟件評論上 排列A類。布線參數(shù)設(shè)置好后,就可以利用Proteus ARES提供 的布線器進(jìn)行自動布線了,執(zhí)行自動布線的方法如下。選擇【

25、Tools】【Auto Router】菜單項,或者 單擊工具按鈕 即可彈出如圖9-38所示的自動布線設(shè)置對話框本次實驗難點在于元器件封裝的創(chuàng)建和指定。因為proteus版本不同,功能有所變動,課件上的方法有些不適用,后來經(jīng)過查找資料最后成功完成。實驗六、開關(guān)控制LED(1) 實驗題目ARM的P0.8口接按鈕,P0.9口接LED等,通過開關(guān)控制LED的亮、滅。(2) 實驗?zāi)康膌 掌握proteus和軟件環(huán)境keilC的聯(lián)機(jī)調(diào)試過程l 掌握基于ARM c編程基礎(chǔ)(3) 實驗設(shè)備1.Proteus 8 Professional 仿真開發(fā)環(huán)境;2.Keil uVision4(4) 實驗步驟1.1打開P

26、roteus 8,選擇isis繪制電路圖,點擊p添加元件LPC21011.2繪制電路圖如圖所示:2.1打開Keil uVision5,new project和new file 2.2編寫代碼:(c語言)/*實驗六、開關(guān)控制LED* ARM的P0.8口接按鈕,P0.9口接LED等,通過開關(guān)控制LED的亮、滅。*/#include#define P0_1 0X100 ;/-/延時/-void delay() unsigned volatile long i ;for(i = 0;i 10000; i+);int main() int p01state;PINSEL0 = 0;IO0DIR = 0X

27、000200;IO0SET = 0X000200;while(1) p01state = IO0PIN &P0_1 ;if(p01state = 0) IO0CLR = 0X000200;delay();else IO0SET = 0x000200;delay();2.3 compile file,生成 .HEX文件(5) 實驗小結(jié)ARM需要初始化很多的功率寄存器和引腳設(shè)置的寄存器 這在STC的51上都是沒有的 但是在啟動代碼里都幫你做好了 編程的時候只需要對引腳和外設(shè)進(jìn)行初始化就可以 如果需要改變運(yùn)行的頻率再去該功率寄存器。首選你需要設(shè)置引腳的功能模塊 ARM很多引腳功能都是復(fù)用的 你要用U

28、ART或者普通IO的功能 必須要設(shè)置引腳的功能模塊 在UART中 你也需要設(shè)置UART相應(yīng)的寄存器 比如速度 模式等寄存器 另外如果你選用新的一些ARM芯片 例如CORTEX M 系列的 那么你還必須要設(shè)置使能這個IOCON GPIO UART功能的時鐘 舉個例子sbit led=P20; 這句在ARM里就需要首先設(shè)置引腳為GPIO功能 在設(shè)置它為輸出功能 再給它高電平才能實現(xiàn)首先來說說PINSEL0和PINSEL1。因為這個芯片很多引腳是復(fù)用的,自然多個功能不可能同時使用,所以就需要選擇引腳功能,用的就是這兩個寄存器,具體細(xì)節(jié)就不說了,自己看Datasheet吧LPC2103中PINSEL0

29、管PIN0.0-PIN0.15,PINSEL1管PIN0.16-PIN0.31。值的設(shè)定基本是00GPIO01第一復(fù)用功能02第二復(fù)用功能03第三復(fù)用功能這兩個寄存器的復(fù)位值都是000000000,也就是所有引腳復(fù)位都是做GPIO用的。再下來是GPIO的控制寄存器了。IOPIN管腳值寄存器??梢杂脕碜x取當(dāng)前的管腳值,賦值也可以控制管腳輸出。IOSET用來管腳置位的寄存器。寫0無效,寫1管腳置高電平。IOCLR用來管腳清除的寄存器。寫0無效,寫1管腳置低電平。IODIR管腳方向控制寄存器。0對應(yīng)輸入,1對應(yīng)輸出。復(fù)位值:000000000(所有管腳復(fù)位為輸入)#define LED1 (117)

30、ARM中操作單個IO不能逐位操作只能通過與運(yùn)算和或運(yùn)算操作(15)代表 1向左移五位 二進(jìn)制 0000 0001 左移5位后變成 0010 0000這樣就GPIO的第5位輸出1其他輸出0向外輸出 通過GPIO_PB|=(15)來只把第5位置1,不影響其他位。通過GPIO_PB&=(10;dly-)for(i=0;i25000;i+); /* 向74HC595發(fā)送一個字節(jié)數(shù)據(jù);發(fā)送數(shù)據(jù)時,高位先發(fā)送 */ void HC595_SendData(uint8 dat) uint8 i; IOCLR0=SPI_CS; / SPI_CS=0; for(i=0;i8;i+) / 發(fā)送8位數(shù)據(jù) IOCLR

31、0=SPI_CLK;/ SPI_CLK=0 /* 設(shè)置SPI的DATA輸出值 */ if(dat&0x80)!=0) IOSET0=SPI_DATA; else IOCLR0=SPI_DATA; dat=dat1; IOSET0=SPI_CLK; / SPI_CLK=1 IOSET0=SPI_CS; / SPI_CS=1, 輸出顯示數(shù)據(jù) void _irq IRQ_Eint1(void) uint32 i; /i=VICIRQStatus; /*p = i;i=IO0PIN; if(i&LEDCON)=0) IOSET0=LEDCON; else IOCLR0=LEDCON; count-;w

32、hile(EXTINT&0x02)!=0) /等待外部中斷信號恢復(fù)為高電平(若信號為低,則中斷標(biāo)志會一直置位) EXTINT=0x02; VICVectAddr=0x00;/在終端發(fā)生時硬件會自動將對應(yīng)的地址VICVectAddr?裝入VICVectAddr,故退出時要清零/*在退出中斷服務(wù)程序時要清零相應(yīng)外設(shè)的中斷標(biāo) 志,以及VICVectAddr寄存器,為響應(yīng)下次中斷作 好準(zhǔn)備。*/void _irq IRQ_Eint2(void) uint32 i; /i=VICIRQStatus; /*p = i;i=IO0PIN; if(i&LEDCON)=0) IOSET0=LEDCON; els

33、e IOCLR0=LEDCON; count = 0;while(EXTINT&0x04)!=0) /等待外部中斷信號恢復(fù)為高電平(若信號為低,則中斷標(biāo)志會一直置位) EXTINT=0x04; VICVectAddr=0x00;/在終端發(fā)生時硬件會自動將對應(yīng)的地址VICVectAddr?裝入VICVectAddr,故退出時要清零/*在退出中斷服務(wù)程序時要清零相應(yīng)外設(shè)的中斷標(biāo) 志,以及VICVectAddr寄存器,為響應(yīng)下次中斷作 好準(zhǔn)備。*/void _irq IRQ_Eint0(void) uint32 i; /i=VICIRQStatus; /*p = i;i=IO0PIN; if(i&L

34、EDCON)=0) IOSET0=LEDCON; else IOCLR0=LEDCON; count+ ;while(EXTINT&0x01)!=0) /等待外部中斷信號恢復(fù)為高電平(若信號為低,則中斷標(biāo)志會一直置位) EXTINT=0x01; VICVectAddr=0x00;/在終端發(fā)生時硬件會自動將對應(yīng)的地址VICVectAddr?裝入VICVectAddr,故退出時要清零/*在退出中斷服務(wù)程序時要清零相應(yīng)外設(shè)的中斷標(biāo) 志,以及VICVectAddr寄存器,為響應(yīng)下次中斷作 好準(zhǔn)備。*/int main(void) Const uint8 DISP_TAB16=0xC0,0xF9,0xA

35、4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E;PINSEL0=0xa0000000; /設(shè)置所有引 腳連接GPIO PINSEL1=0x00000001; IO0DIR=LEDCON | SPI_IOCON; /設(shè)置SPI控制口為輸 出 IO0CLR=LEDCON; IO0SET=LEDCON; EXTMODE=EXTMODE|0x01;/邊緣觸發(fā) EXTPOLAR=EXTPOLAR&0x0e; /下降沿觸發(fā) */*設(shè)置向量中斷控制器*/ VICIntSelect=VICIntSelect&(714);/E

36、INT1、2、0中斷分配為IRQ中斷VICVectCntl1=0x20|15; /EINT1中斷分配為向量IRQ通道1 VICVectCntl2 = 0x20|16;VICVectCntl3 = 0x20|14;VICVectAddr1=(uint32)IRQ_Eint1; /向量IRQ通道1的中斷服務(wù)程序地址為Eint1_ISR VICVectAddr2=(uint32)IRQ_Eint2;VICVectAddr3=(uint32)IRQ_Eint0;VICIntEnable=(714); /EINT1中斷使能while(1) HC595_SendData(DISP_TABcount); /

37、輸出LED顯示數(shù)據(jù) DelayNS(5); return 0;/在project選項里面勾選use memory layout from target dialog!2.3 compile file,生成 .HEX文件(5) 實驗小結(jié)Q015Q11Q22Q33Q44Q55Q66Q77Q79SH_CP11ST_CP12DS14MR10OE13U374HC595 74HC595簡介引腳說明: 1、Q0Q7為8位并行數(shù)據(jù)輸出 2、Q7 第9腳,串行數(shù)據(jù)輸出,用于級聯(lián) 3、MR 第10腳 主復(fù)位(低電平) 4、SH_CP 第11腳 移位寄存器時鐘輸入 5、ST_CP 第12腳 存儲寄存器時鐘輸入 6、

38、OE 第13腳 輸出有效(低電平) 7、DS 第14腳 串行數(shù)據(jù)輸入 LPC21XX外部中斷輸入概述LPC2106具有3路外部中斷,可以設(shè)置為2種類型: l 邊沿觸發(fā): 上升沿觸發(fā) 下降沿觸發(fā) l 電平觸發(fā): 高電平觸發(fā) 低電平觸發(fā) 本次實驗用到一些比較難懂的中斷寄存器:l 中斷選擇寄存器(VICIntSelect):位311817210功能保留 A/D轉(zhuǎn)換器外部中斷3 ARM內(nèi)核WDT寄存器中每一位控制著一個中斷源,各中斷源的位置與中斷源列 表所示相同。向某位寫入1時,對應(yīng)中斷源產(chǎn)生的中斷為FIQ中斷,否則為IRQ中斷l(xiāng) 向量IRQ中斷相關(guān)寄存器向量地址寄存器(VICVectAddr015)

39、:該寄存器中存放對應(yīng)優(yōu)先級向量IRQ中斷服務(wù)程序的入口地址。位7654.0功能EN中斷源序號VICVectCntlx4:0:分配給此優(yōu)先級向量IRQ中斷的中斷源序號;VICVectCntlx5:該位為1,使能當(dāng)前優(yōu)先級的向量IRQ中斷。否則為禁止。向量控制寄存器(VICVectCntl015):位31:0功能中斷服務(wù)程序入口地址 使用VIC的注意要點 l 如果在片內(nèi)RAM中調(diào)試程序,并使用了中斷,那么必須將存儲器映射控制設(shè)置為內(nèi)部RAM模式; l 將多個中斷源設(shè)置為FIQ,將增加中斷響應(yīng)延時, 所以建議FIQ中斷只有一個中斷源; l ADS1.2規(guī)定在定義中斷服務(wù)函數(shù)時必須加入關(guān)鍵 字“_ir

40、q”,保證函數(shù)返回時會切換處理器模式; l 在退出中斷服務(wù)程序時要清零相應(yīng)外設(shè)的中斷標(biāo) 志,以及VICVectAddr寄存器,為響應(yīng)下次中斷作好準(zhǔn)備實驗八、UART(1) 實驗題目采用中斷實現(xiàn)通過串口0發(fā)送“Hello World!”,然后在虛擬終端接收器上查看。(2) 實驗?zāi)康膌 掌握proteus和軟件環(huán)境keilC的聯(lián)機(jī)調(diào)試過程l 掌握基于ARM UART編程基礎(chǔ)(3) 實驗設(shè)備1.Proteus 8 Professional 仿真開發(fā)環(huán)境;2.Keil uVision4(4) 實驗步驟1.1打開Proteus 8,選擇isis繪制電路圖,點擊p添加元件LPC21011.2繪制電路圖如圖所示:2.1打開Keil uVision5,new project和new file 2.2編寫代碼:(c語言)/*實驗八、UART*采用中斷實現(xiàn)通過串口0發(fā)送“Hello World!”,然后在虛擬終端接收器上查看。*/#includelPC21XX.H/*= LPC21XX 串口使用接收發(fā)送中斷 = */#define Fosc 11059200 /晶振頻率,10MHz25MHz,應(yīng)當(dāng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論