版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 接口技術(shù) </b></p><p><b> 課程設(shè)計報告書</b></p><p><b> 專業(yè)班級 </b></p><p><b> 學生姓名 </b></p><p><b> 指導教師 <
2、/b></p><p><b> 日 期</b></p><p><b> 一、設(shè)計目的</b></p><p> 1.融會貫通教材各章的內(nèi)容,通過知識的綜合運用,加深對基本接口芯片的工作原理及與CPU互連的認識,以進一步掌握常見接口的用法。</p><p> 2.學習設(shè)計和調(diào)試
3、嵌入式系統(tǒng)開發(fā)的基本步驟和方法,培養(yǎng)科學研究的獨立工作能力,取得工程設(shè)計和調(diào)試的實踐和經(jīng)驗。</p><p><b> 二、設(shè)計環(huán)境</b></p><p> PC機一臺( Windows操作系統(tǒng)并安裝ADT2000),JXARM9-2410-1實驗箱及配件一套。</p><p><b> 二、設(shè)計任務(wù)</b><
4、;/p><p> 1)時鐘顯示功能,能夠以十進制顯示“時”、“分”、“秒”。</p><p> 2)具有調(diào)節(jié)時、分、秒的功能。</p><p> 3)整點自動報時,在整點時,便自動發(fā)出鳴叫聲,時長1s。</p><p><b> 三、設(shè)計內(nèi)容</b></p><p><b> 1.
5、硬件電路原理圖</b></p><p> 一個具有計時、調(diào)時、報時、顯示等基本功能的數(shù)字鐘主要由振蕩器、分頻器、計數(shù)器、譯碼器、顯示器、校時電路、報時電路等七部分組成。振蕩器產(chǎn)生的信號經(jīng)過分頻器得到秒脈沖,秒脈沖送入計數(shù)器計數(shù),計數(shù)結(jié)果通過“時”、“分”、“秒”譯碼器譯碼,并通過顯示器顯示時間。</p><p><b> 整體邏輯框圖如下:</b>&l
6、t;/p><p><b> 硬件電路圖如下:</b></p><p> 2.程序流程圖及代碼</p><p><b> 程序如下:</b></p><p> #include "def.h"</p><p> #include "2410l
7、ib.h"</p><p> #include "option.h"</p><p> #include "2410addr.h"</p><p> #include "interrupt.h"</p><p> unsigned char segtable[10]
8、 = { 0xc0, 0xf9, 0xa4, </p><p> 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, };</p><p> void Delay0(int time) {</p><p><b> int i;</b></p><p>
9、; int delayLoopCount=1000;</p><p> for(;time>0;time--);</p><p> for(i=0;i<delayLoopCount;i++);</p><p><b> }</b></p><p> int r_BCDHOUR ;</p>
10、<p> int r_BCDMIN ;</p><p> int r_BCDSEC ;</p><p> /* 表示日期、時間的數(shù)據(jù)結(jié)構(gòu)*/</p><p> typedef struct ST_DATE</p><p><b> {</b></p><p> short
11、 year; // 年</p><p> charmon; // 月</p><p> charday; // 日</p><p> charweek_day; // 星期</p><p> charhour; // 時</p><p> ch
12、armin; // 分</p><p> charsec; // 秒</p><p> } st_date;</p><p> int led_index = 0;</p><p> int ext0_count = 0;</p><p> void rtc_tick_isr(
13、void) __attribute__ ((interrupt("IRQ")));;</p><p> void rtc_int_isr(void) __attribute__ ((interrupt("IRQ")));;</p><p> void rtc_set_date(st_date* p_date)</p><p&g
14、t;<b> {</b></p><p> rRTCCON = 0x01;</p><p> rBCDYEAR = p_date->year;</p><p> rBCDMON = p_date->mon;</p><p> rBCDDAY = p_date->day;</p&g
15、t;<p> rBCDDATE = p_date->week_day;</p><p> rBCDHOUR = p_date->hour;</p><p> rBCDMIN = p_date->min;</p><p> rBCDSEC = p_date->sec;</p><p> rRT
16、CCON = 0x00;</p><p><b> }</b></p><p> void rtc_get_date(st_date* p_date)</p><p><b> {</b></p><p> rRTCCON = 0x01;</p><p>
17、p_date->year= rBCDYEAR ;</p><p> p_date->mon= rBCDMON ;</p><p> p_date->day= rBCDDAY ;</p><p> p_date->week_day= rBCDDATE ;</p><p> p_date-&g
18、t;hour= rBCDHOUR ;</p><p> p_date->min= rBCDMIN ;</p><p> p_date->sec= rBCDSEC ;</p><p> rRTCCON = 0x00;</p><p><b> }</b></p>&
19、lt;p> void rtc_tick_init( char tick )</p><p><b> {</b></p><p> Irq_Request(IRQ_TICK, rtc_tick_isr);</p><p> rRTCCON = 0x0; //No reset[3], Merge BCD c
20、ounters[2], BCD clock select XTAL[1], RTC Control disable[0]</p><p> rTICNT = (tick&0x7f)|0x80;/*TICK 中斷使能,周期為(1+tick)/128秒*/ </p><p> Irq_Enable(IRQ_TICK); </p><p><
21、;b> }</b></p><p> void rtc_alarm_set(st_date* p_date, unsigned char mode)</p><p><b> {</b></p><p> Irq_Request(IRQ_RTC, rtc_int_isr);</p><p>
22、rRTCCON = 0x01;</p><p> rALMYEAR = p_date->year;</p><p> rALMMON = p_date->mon;</p><p> rALMDATE = p_date->day;</p><p> rALMHOUR = p_date->hour;</
23、p><p> rALMMIN = p_date->min;</p><p> rALMSEC = p_date->sec;</p><p> rRTCALM = mode;</p><p> rRTCCON = 0x00;</p><p> Irq_Enable(IRQ_RTC); &l
24、t;/p><p><b> }</b></p><p> void Main(void)</p><p><b> {</b></p><p> int old_index ;</p><p> st_date m_date;</p><p>
25、 /* 配置系統(tǒng)時鐘*/</p><p> ChangeClockDivider(1,1); // 1:2:4 </p><p> ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz </p><p> /* 中斷初始化*/</p><p> Isr_Init
26、();</p><p> /* 初始化端口*/</p><p> Port_Init();</p><p> /* 初始化串口*/</p><p> Uart_Init(0,115200);</p><p> Uart_Select(0);</p><p> /* 打印提示信息*/&
27、lt;/p><p> PRINTF("\n---實時時鐘測試程序---\n");</p><p> PRINTF("\n請將UART0與PC串口進行連接,然后啟動超級終端程序(115200, 8, N, 1)\n");</p><p> PRINTF("\n實時時鐘測試開始\n");</p>
28、<p> /* 采用BCD編碼,如年需要設(shè)置的值為x2004 */</p><p> m_date.year= 0x2000+0x04 ;</p><p> m_date.mon= 0x03 ;</p><p> m_date.day= 0x02 ;</p><p> m_date.week_day=
29、 0x02 ;</p><p> m_date.hour= 0xc5 ;</p><p> m_date.min= 0x40 ;</p><p> m_date.sec= 0x00 ;</p><p> /* 修改當前日期和時間*/</p><p> rtc_set_date(&m
30、_date);</p><p> m_date.sec= 0x05 ;</p><p> /* 設(shè)置告警的時間及方式,x41表示使能RTC告警,以及使能秒時鐘告警*/</p><p> rtc_alarm_set(&m_date, 0x41);</p><p> rtc_tick_init(127);</p>
31、<p> old_index = led_index;</p><p> PRINTF("\r\n\r\n"); </p><p><b> while(1)</b></p><p><b> {</b></p><p> if(old_index !=
32、led_index)/* 每隔一秒更新一次數(shù)據(jù)*/</p><p> { rtc_get_date(&m_date);</p><p> old_index = led_index;</p><p> r_BCDHOUR =m_date.hour;</p><p> r_BCDMIN =m_date.min;&
33、lt;/p><p> r_BCDSEC =m_date.sec;</p><p> PRINTF(/* 時鐘數(shù)據(jù)為BCD碼格式,以進制顯示*/</p><p> "\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec);</p><p&g
34、t;<b> }</b></p><p> *((U8*) 0x10000006) = 0xdf;</p><p> *((U8*) 0x10000004) = segtable[(r_BCDHOUR/16)%16]; </p><p> Delay0(5);</p><p> *((U8*) 0x
35、10000006) = 0xef;</p><p> *((U8*) 0x10000004) = segtable[r_BCDHOUR%16]; </p><p> Delay0(5);</p><p> *((U8*) 0x10000006) = 0xf7;</p><p> *((U8*) 0x10000004)
36、 = segtable[ (r_BCDMIN/16)%16];</p><p> Delay0(5);</p><p> *((U8*) 0x10000006) = 0xfb;</p><p> *((U8*) 0x10000004) = segtable[ r_BCDMIN%16];</p><p> Delay0(5);&l
37、t;/p><p> *((U8*) 0x10000006) = 0xfd;</p><p> *((U8*) 0x10000004) = segtable[(r_BCDSEC/16)%16];</p><p> Delay0(5);</p><p> *((U8*) 0x10000006) = 0xfe;</p><
38、;p> *((U8*) 0x10000004) = segtable[r_BCDSEC%16];</p><p> Delay0(1); </p><p> int ch=Key_GetKeyPoll();</p><p><b> int j;</b></p><p> if(ch!=0) <
39、/p><p> { // PRINTF("\r'%c'鍵按下",ch);</p><p> if(ch=='1') //1鍵按下,修改小時數(shù)</p><p> { int R[2];</p><p><b> int i=0;</b
40、></p><p> for(;i<2;)</p><p><b> {</b></p><p> j=Key_GetKeyPoll();</p><p><b> if(j!=0)</b></p><p> {R[i]=j;i++;}</p>
41、;<p><b> }</b></p><p> int m_date.hour=(R[0]-30)*10+(R[1]-30);</p><p> rtc_set_date(&m_date);</p><p><b> }</b></p><p> if(ch==
42、39;2') //2鍵按下,修改分鐘數(shù)</p><p><b> {</b></p><p><b> int Q[2];</b></p><p><b> int i=0;</b></p><p> for(;i<2
43、;)</p><p><b> {</b></p><p> j=Key_GetKeyPoll();</p><p><b> if(j!=0)</b></p><p> {Q[i]=j;i++;}</p><p><b> }</b><
44、/p><p> int m_date.min=(Q[0]-30)*10+(Q[1]-30);</p><p> rtc_set_date(&m_date);</p><p><b> }</b></p><p> if(ch=='3') //3鍵按下,修改
45、秒數(shù)</p><p><b> {</b></p><p><b> int W[2];</b></p><p><b> int i=0;</b></p><p> for(;i<2;)</p><p><b> {</
46、b></p><p> j=Key_GetKeyPoll();</p><p><b> if(j!=0)</b></p><p> {W[i]=j;i++;}</p><p><b> }</b></p><p> int m_date.min=(W[0]-
47、30)*10+W[1]-30);</p><p> rtc_set_date(&m_date);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b
48、> }</b></p><p> void rtc_tick_isr(void)</p><p><b> {</b></p><p> Irq_Clear(IRQ_TICK); </p><p> led_index++;</p><p><b>
49、; }</b></p><p> void rtc_int_isr(void)</p><p><b> {</b></p><p> Irq_Clear(IRQ_RTC); /*清除RTC中斷*/</p><p> ext0_count++;</p>&
50、lt;p> PRINTF("\r\nAlarm\r\n ");</p><p><b> }</b></p><p> #include "def.h"</p><p> #include "option.h"</p>&l
51、t;p> #include "2410addr.h"</p><p> #include "2410lib.h"</p><p> #include "2410slib.h" </p><p> #include "interrupt.h"</p><p
52、> #include <stdarg.h></p><p> #include <string.h></p><p> #include <stdlib.h></p><p> #include <stdio.h></p><p> #include <ctype.h>
53、;</p><p> void HaltUndef(void);</p><p> void HaltSwi(void);</p><p> void HaltPabort(void);</p><p> void HaltDabort(void);</p><p> void Isr_Init(void)&
54、lt;/p><p><b> {</b></p><p> pISR_UNDEF = (unsigned)HaltUndef;</p><p> pISR_SWI = (unsigned)HaltSwi;</p><p> pISR_PABORT = (unsigned)HaltPabort;</p&g
55、t;<p> pISR_DABORT = (unsigned)HaltDabort;</p><p> rINTMOD = 0x0; //All=IRQ mode</p><p> rINTMSK = BIT_ALLMSK; //All interrupt is masked.</p
56、><p> rINTSUBMSK = BIT_SUB_ALLMSK; //All sub-interrupt is masked. <- April 01, 2002 SOP</p><p><b> }</b></p><p> void Irq_Request(int irq_no, void* irq_rout
57、ine)</p><p><b> {</b></p><p> if(irq_no >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p> *(unsigned int*)((irq_no - 1) * sizeof(unsigned int) + (unsigned int)(_
58、ISR_STARTADDRESS+0x20)) = (unsigned int)irq_routine;</p><p><b> }</b></p><p> void Irq_Enable(int irq_no)</p><p><b> {</b></p><p> if(irq_no
59、 >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p> rINTMSK &= ~(1 << (irq_no - 1));</p><p><b> }</b></p><p> void Irq_Disable(int irq_no)</p>&l
60、t;p><b> {</b></p><p> if(irq_no >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p> rINTMSK |= (1 << (irq_no - 1));</p><p><b> }</b></p>
61、;<p> void Irq_Clear(int irq_no)</p><p><b> {</b></p><p> rSRCPND = (1 << (irq_no - 1));/*清除RTC中斷*/</p><p> rINTPND = (1 << (irq_no - 1
62、));</p><p><b> rINTPND;</b></p><p> void HaltUndef(void)</p><p><b> {</b></p><p> Uart_Printf("Undefined instruction exception.\n"
63、);</p><p><b> while(1);</b></p><p><b> }</b></p><p> void HaltSwi(void)</p><p><b> {</b></p><p> Uart_Printf("
64、;SWI exception.\n");</p><p><b> while(1);</b></p><p><b> }</b></p><p> void HaltPabort(void)</p><p><b> {</b></p>&l
65、t;p> Uart_Printf("Pabort exception.\n");</p><p><b> while(1);</b></p><p><b> }</b></p><p> void HaltDabort(void)</p><p><b&g
66、t; {</b></p><p> Uart_Printf("Dabort exception.\n");</p><p><b> while(1);</b></p><p><b> }</b></p><p> #include <string.
67、h></p><p> #include "2410addr.h"</p><p> #include "2410lib.h"</p><p> #include "timer.h"</p><p> #include "interrupt.h"&l
68、t;/p><p> #define RECV_CMD_MAX_BUF 2048</p><p> char recv_buf[RECV_CMD_MAX_BUF];</p><p> int recv_read = 0;</p><p> int recv_write = 0;</p><p> char ke
69、y_recv_buf[RECV_CMD_MAX_BUF];</p><p> int key_recv_read = 0;</p><p> int key_recv_write = 0;</p><p> int timer1_count = 0;</p><p> enum KEYBOARD_SCAN_STATUS</
70、p><p><b> {</b></p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_SECOND,</p><p> KEYBOARD_SCAN_THIRD,</p><p> KEYBOARD_SCAN_FOURTH</p>
71、;<p><b> };</b></p><p> int row = 0;</p><p> extern unsigned char output_0x10000000;</p><p> unsigned char ascii_key, input_key[4], input_key1[4], key_mask =
72、 0x0F;</p><p> unsigned char*keyboard_port_scan = (unsigned char*)0x10000000;</p><p> unsigned char*keyboard_port_value = (unsigned char*)0x10000002;</p><p> int k
73、eyboard_scan_status[4] = {</p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_FIRST</p><p>&l
74、t;b> };</b></p><p> char key_get_char(int row, int col)</p><p><b> {</b></p><p> char key = 0;</p><p> switch( row )</p><p><b
75、> {</b></p><p><b> case 0:</b></p><p> if((col & 0x01) == 0) key = '0'; </p><p> else if((col & 0x02) == 0) key = 'A'; </p>&
76、lt;p> else if((col & 0x04) == 0) key = 'B'; </p><p> else if((col & 0x08) == 0) key = 'F'; </p><p><b> break;</b></p><p><b> case 1:
77、</b></p><p> if((col & 0x01) == 0) key = '7'; </p><p> else if((col & 0x02) == 0) key = '8'; </p><p> else if((col & 0x04) == 0) key = '9
78、9;;</p><p> else if((col & 0x08) == 0) key = 'E';</p><p><b> break;</b></p><p><b> case 2:</b></p><p> if((col & 0x01) == 0)
79、 key = '4'; </p><p> else if((col & 0x02) == 0) key = '5'; </p><p> else if((col & 0x04) == 0) key = '6'; </p><p> else if((col & 0x08) == 0)
80、key = 'D'; </p><p><b> break;</b></p><p><b> case 3:</b></p><p> if((col & 0x01) == 0) key = '1'; </p><p> else if((col
81、& 0x02) == 0) key = '2'; </p><p> else if((col & 0x04) == 0) key = '3'; </p><p> else if((col & 0x08) == 0) key = 'C'; </p><p><b> break
82、;</b></p><p><b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p> return key;</p><p><b> }&
83、lt;/b></p><p> void recv_key(int key)</p><p><b> {</b></p><p> key_recv_buf[key_recv_write] = key;</p><p> key_recv_write ++;</p><p> i
84、f(key_recv_write >= RECV_CMD_MAX_BUF)</p><p> key_recv_write = 0;</p><p> if(key_recv_write == key_recv_read)</p><p><b> {</b></p><p><b> // 緩沖
85、區(qū)以滿</b></p><p> key_recv_read ++;</p><p> if(key_recv_read >= RECV_CMD_MAX_BUF)</p><p> key_recv_read = 0;</p><p><b> }</b></p><p>
86、;<b> }</b></p><p> void Kbd_Scan(void)</p><p><b> {</b></p><p> int loopcnt = row, bexit = 0;</p><p><b> int temp;</b></p>
87、;<p><b> // 鍵盤掃描</b></p><p> for( loopcnt = row; loopcnt < row + 4; loopcnt ++)</p><p><b> {</b></p><p> if(loopcnt >= 4)</p><p&g
88、t; temp = loopcnt - 4;</p><p><b> else</b></p><p> temp = loopcnt;</p><p> switch(keyboard_scan_status[temp])</p><p><b> {</b></p>&
89、lt;p> case KEYBOARD_SCAN_FIRST:</p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_
90、SECOND;</p><p> bexit = 1;</p><p><b> break;</b></p><p> case KEYBOARD_SCAN_SECOND:</p><p> input_key[temp] = (*keyboard_port_value) & key_mask;/*并
91、獲取第一次掃描值*/</p><p> if(input_key[temp] == key_mask)</p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRST;/* 沒有按鍵,回到開始狀態(tài)*/</p><p><b> else</b></p><
92、p><b> {</b></p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_THIRD;/* 有按鍵*/</p><p> bexit = 1;</p><p><b> }</b></p><p><b> b
93、reak;</b></p><p> case KEYBOARD_SCAN_THIRD:</p><p> if (((*keyboard_port_value) & key_mask) != input_key[temp]) </p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRS
94、T;</p><p><b> else</b></p><p><b> {</b></p><p> ascii_key = key_get_char(temp, input_key[temp]);</p><p> keyboard_scan_status[temp] = KEYB
95、OARD_SCAN_FOURTH;</p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p><p> bexit = 1;</p><p><b> }</b></p&g
96、t;<p><b> break;</b></p><p> case KEYBOARD_SCAN_FOURTH:</p><p> input_key1[temp] = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p> if(input_key1[
97、temp] == key_mask)</p><p><b> {</b></p><p> // get a key</p><p> recv_key(ascii_key);</p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRST;<
98、;/p><p><b> }else</b></p><p><b> {</b></p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p>&l
99、t;p> bexit = 1;</p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> if(bexit)</b></p>&
100、lt;p><b> break;</b></p><p><b> }</b></p><p> row = temp;</p><p><b> }</b></p><p> char Key_GetKey()</p><p><
101、;b> {</b></p><p><b> char ch;</b></p><p> if(key_recv_write == key_recv_read)</p><p><b> {</b></p><p> /* no key found */</p>
102、;<p><b> ch = 0;</b></p><p><b> }else</b></p><p><b> {</b></p><p> ch = key_recv_buf[key_recv_read];</p><p> key_recv_re
103、ad ++;</p><p> if(key_recv_read >= RECV_CMD_MAX_BUF)</p><p> key_recv_read = 0;</p><p><b> }</b></p><p> return ch;</p><p><b> }&
104、lt;/b></p><p> char Key_GetKeyPoll()</p><p> { int row;</p><p> unsigned char ascii_key, input_key, input_key1, key_mask = 0x0F;</p><p> for( row = 0; row &l
105、t; 4; row++)</p><p><b> {</b></p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<row)); /*將row列置低電平*/</p><p> Delay(1);/*延時
106、*/</p><p> input_key = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p> if(input_key == key_mask)continue;/* 沒有按鍵*/</p><p> /* 延時,再次獲取掃描值,如果兩次的值不等,則認為是一個干擾
107、*/</p><p><b> Delay(1);</b></p><p> if (((*keyboard_port_value) & key_mask) != input_key) continue;</p><p><b> // 等待按鍵松開</b></p><p>&l
108、t;b> while(1)</b></p><p><b> {</b></p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<row)); /*將row列置低電平*/</p><p><b>
109、Delay(1);</b></p><p> input_key1 = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p> if(input_key1 == key_mask)break;/* 沒有按鍵*/</p><p><b> }</b>
110、;</p><p> ascii_key = key_get_char(row, input_key);/* 查表*/</p><p> return ascii_key;/* 顯示結(jié)果*/</p><p><b> }</b></p><p><b> return 0;&
111、lt;/b></p><p><b> }</b></p><p> #include "def.h"</p><p> #include "2410lib.h"</p><p> #include "option.h"</p>&l
112、t;p> #include "2410addr.h"</p><p> #include "interrupt.h"</p><p> #include <stdarg.h></p><p> #include <string.h></p><p> #inclu
113、de <stdlib.h></p><p> #include <stdio.h></p><p> #include <ctype.h></p><p> extern char Image_RW_Limit[];</p><p> void *mallocPt=Image_RW_Limit;&l
114、t;/p><p> static int delayLoopCount = FCLK/10000/10;</p><p> void Delay(int time)</p><p><b> {</b></p><p> int i,adjust=0;</p><p> if(time==0
115、)</p><p><b> {</b></p><p> time = 200;</p><p> adjust = 1;</p><p> delayLoopCount = 400;</p><p> rWTCON = ((PCLK/1000000-1)<<8)|(2
116、<<3); </p><p> rWTDAT = 0xffff; //for first update</p><p> rWTCNT = 0xffff; //resolution=64us @any PCLK </p><p> r
117、WTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start</p><p><b> }</b></p><p> for(;time>0;time--)</p><p> for(i=0;i<delayLoopC
118、ount;i++);</p><p> if(adjust==1)</p><p><b> {</b></p><p> rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); //Watch-dog timer stop</p><p> i = 0xffff
119、 - rWTCNT; //1count->64us, 200*400 cycle runtime = 64*i us</p><p> delayLoopCount = 8000000/(i*64); //200*400:64*i=1*x:100 -> x=80000*100/(64*i) </p><p><
120、b> }</b></p><p><b> }</b></p><p> void Port_Init(void)</p><p><b> {</b></p><p> rGPACON = 0x7fffff; </p><p> rGPBCON
121、 = 0x044555;</p><p> rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0]</p><p> rGPCCON = 0xaaaaaaaa; </p><p> rGPCUP = 0xffff; // The pull up function
122、 is disabled GPC[15:0] </p><p> rGPDCON = 0xaaaaaaaa; </p><p> rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0]</p><p> rGPECON = 0xaaaaaaaa; </
123、p><p> rGPEUP = 0xffff; // The pull up function is disabled GPE[15:0]</p><p> rGPFCON = 0x55aa;</p><p> rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]</p&g
124、t;<p> #if 0 </p><p> rGPGCON = 0xff95ffba;</p><p> rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]</p><p> #else </p><p> rGPGC
125、ON = 0xff055555;</p><p> rGPGUP = 0xfffff;</p><p><b> #endif</b></p><p> rGPHCON = 0x2afaaa;</p><p> rGPHUP = 0x7ff; // The pull up function is dis
126、abled GPH[10:0]</p><p> rEXTINT0 = 0x22222222; // EINT[7:0]</p><p> rEXTINT1 = 0x22222222; // EINT[15:8]</p><p> rEXTINT2 = 0x22222222; // EINT[23:16]</p><p&g
127、t; }static int whichUart=0;</p><p> void Uart_Init(int pclk,int baud)</p><p><b> {</b></p><p><b> int i;</b></p><p> if(pclk == 0)</p>
128、;<p> pclk = PCLK;</p><p> rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable</p><p> rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable</p&
129、gt;<p> rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable</p><p> rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable</p><p> rUMCON1 = 0x0; //U
130、ART chaneel 1 MODEM control register, AFC disable</p><p> rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits</p><p> rUCON0 = 0x245; // Control r
131、egister</p><p> rUBRDIV0=( (int)(pclk/16./baud) -1 ); //Baud rate divisior register 0</p><p> rULCON1 = 0x3;</p><p> rUCON1 = 0x245;</p><p> rUBRDIV1=( (int)(pcl
132、k/16./baud) -1 );</p><p> rULCON2 = 0x3;</p><p> rUCON2 = 0x245;</p><p> rUBRDIV2=( (int)(pclk/16./baud) -1 ); </p><p> for(i=0;i<100;i++);</p><p&
133、gt;<b> }</b></p><p> void Uart_Select(int ch)</p><p><b> {</b></p><p> whichUart = ch;</p><p><b> }</b></p><p> v
134、oid Uart_TxEmpty(int ch)</p><p><b> {</b></p><p><b> if(ch==0)</b></p><p> while(!(rUTRSTAT0 & 0x4)); //Wait until tx shifter is empty.</p><
135、;p> else if(ch==1)</p><p> while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty.</p><p> else if(ch==2)</p><p> while(!(rUTRSTAT2 & 0x4)); //Wait until tx shif
136、ter is empty.</p><p><b> }</b></p><p> char Uart_Getch(void)</p><p><b> {</b></p><p> if(whichUart==0)</p><p><b> {
137、 </b></p><p> while(!(rUTRSTAT0 & 0x1)); //Receive data ready</p><p> return RdURXH0();</p><p><b> }</b></p><p> else if(whichUart==1)</p&
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子時鐘課程設(shè)計
- 電子時鐘 課程設(shè)計
- 電子時鐘課程設(shè)計
- 電子時鐘課程設(shè)計
- 課程設(shè)計--電子時鐘
- 課程設(shè)計----電子時鐘設(shè)計
- 電子時鐘課程設(shè)計--數(shù)字電子時鐘焊接調(diào)試報告
- 電子時鐘課程設(shè)計 (2)
- 電子時鐘課程設(shè)計2
- led電子時鐘課程設(shè)計
- 電子時鐘課程設(shè)計報告
- eda課程設(shè)計---電子時鐘
- 電子時鐘課程設(shè)計 (2)
- 數(shù)字電子時鐘課程設(shè)計
- 數(shù)字電子時鐘課程設(shè)計
- eda課程設(shè)計--電子時鐘
- 電子時鐘課程設(shè)計--proteus環(huán)境下的電子時鐘設(shè)計
- 電子時鐘課程設(shè)計(論文)
- 數(shù)字電子時鐘課程設(shè)計
- 電子時鐘課程設(shè)計 (3)
評論
0/150
提交評論