版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Ml6c族單片機(jī)編程入門
作者:快樂水牛
M16C族或片機(jī)為原二菱電機(jī)生產(chǎn)的16位CISC微控制器.
主要特點(diǎn)為:
低電壓.低功耗.抗干擾性強(qiáng)
具符大容f*FLASHROM,SRAM
豐富的外設(shè).如定時(shí)牌.AD.DA.CAN控制器等
Wr有這些特性,使Ml6c廠泛應(yīng)用汽車,電動(dòng)軍,工業(yè)設(shè)備及家電嚴(yán)必上.
下面投們講講如何在M16C平臺(tái)下編程.
1,使用HEW新建一個(gè)工程。
打開HEW,選擇Createanewprojectworkspace.點(diǎn)OK.
選拜CPUfamily,這里我們選杼Ml6c選項(xiàng)。
工具圾Toolchain我的默認(rèn)選擇RenesasM16CStandard.
好了,接卜來我們要輸入一個(gè)工程名字,在workspacename里輸入ml6c_test,
接下來.注意.也是最重要的一步,在左邊的projecttypes下面,我們選擇CsourcestartupApplication這個(gè)選項(xiàng),該選項(xiàng)的含義是你將建
立?個(gè)C語占開始的工程.當(dāng)然.如果這持第Application.則為匯編語占開始的工9
考慮到大多數(shù)朋友對(duì)Ml6c的匯編不是很熟悉,我們這中以C語言工程為參考.
點(diǎn)確定后,繼續(xù)選抒I:只鏈依本5.43.0C.CPUSeries我選擇為M16C/60,CPUGroup我選擇為6N4.然后點(diǎn)next,繼續(xù)點(diǎn)next使用默認(rèn)選
項(xiàng),最后選擇targets為M16CE8aSYSTEM,這是是你的CPU嬰用到的仿真器,我們一般使用埔薩產(chǎn)的小獷ONChipdebugger仿此器E8a.
點(diǎn)next,最后點(diǎn)Finish.OK.我們的一個(gè)C語吉工程已經(jīng)建好了.
2.工和雙文件分析
我們發(fā)現(xiàn)我們建的ml6c_test工程里面有?些源代碼文件.卜面我們對(duì)這些文件進(jìn)行分析.
(注憊:建立工程時(shí),選擇不同的選項(xiàng)可能會(huì)產(chǎn)生不同的源代碼文件,不過這不影響我們的使用)
ml6c_test.c
源代碼:
/******************?**********/
voidmain(void)
該文件是main。函數(shù).你的所有應(yīng)用函數(shù)都會(huì)在maln()里圜用
resetprg.c
源代碼:
#indude"sfr6n4.h"
*include-typedefine.h"
#indude"resetprg.h"
extern_UINT_stack_top,_istack_top;
//DEF_BANKSELECT;
DEFSBREGISTER:
#pragmaentrystart
voidstart(void);
externvoidinitsct(void);
externvoidJnit(void);
voidexit(void);
voidmain(void);
#pragmasectionprograminterrupt
voidstart(void)
<
_lsp_=&_istack_top;//setinterruptstackpointer
prcr=0x02;//changeprotectmoderegister
pmO=0x00;//setprocessormoderegister
prcr-0x00;//changeprotectmoderegister
_flg_=_F_value_;//setflagregister
#if_STACKSIZE_!?O
_sp_=&_stack_top;//setuserstackpointer
#endif
_sb__0x400;U40011fixotion(Donotchongc)
//setvariablevector'saddress
_asm("Ide#((topofvector)>>16)&0FFFFh,INTBH");
_asm("Ide#(topofvector)&OFFFFh,INTBL");
initsct();//initializeeachsections
#if_HEAPSIZE_1=0
heap_lnit();//Initializeheap
#endif
#if_STANDARD」O_!=0
Jnit();//initializestandardI/O
#endif
_fb_-0;//initializeFBregistefordebugger
main();//callmainroutine
exit();//callexit
)
voidexit(void)
(
whilefl);//infiniteloop
)
該文件為上電復(fù)位處理
start。為CPU上電更位后執(zhí)行的第一個(gè)函數(shù),我們可以在這里設(shè)置中斷棧指針寄存器,處理器模式等“呆終它將啊用main。函數(shù),
intprg.c
源代碼:
/***************
#include"sfr6n4.h"
#include"cstartdef.h"
//BRK(softwareInt0)
#pragmainterrupt_brk(vect=O)
void_brk(void){}
//canO/1wakeup(so代wareint1)
#pragmainterrupt_canO(vect=l)
void_canO(void){}
//canOreceive(softwareint2)
#pragmainterrupt_canO_receive(vect=2)
void_ranC_ra「aiva(vcid){}
//canOtrance(softwareInt3)
#pragmainterrupt_can0_trance(vect=3)
void_canO_trance(void)<)
//____
//INT3(softwareint4)
#pragmainterrupt_int3(vect=4)
voidJnt3(void){}
//TIMERB5(softwareInt5)
#pragmainterrupt_timer_b5(vcct-5)
void_timer_b5(void){}
//TIMERB4.UART1buscollision(softwareint6)
#pragmainterrupt_timer_b4(vect=6)
void_timer_b4(vold){}
//TIMERB3.UART0buscollision(softwareint7)
#pragmainterrupt_tlmer_b3(vect=7)
void_timer_b3(void){}
//____
//canlreceive/INT5(softwareint8)
#pragmainterrupt_canl_receive(vect=8)
void_canl_recelve(void){}
//SI/O3/canltrance(softwareint9)
#pragmainterrupt_canl_trance(vect=9)
void_canl_trance(void){}
//UART2BusCollision(softwareint10)
#pragmainterrupt_u2_bus_collision(vect=10)
void_u2_bus_collision(void)<>
//DMAO(softwareint11)
#pragmainterrupt_dmaO(vect=ll)
void_dma0(void){}
//DMA1(softwareint12)
#pragmainterrupt_dmal(vect=12)
void_dmal(void){}
//canO/1error(softwareint13)
#pragmainterrupt_canO_error(vect=13)
void_canO_error(void)<)
//timerbO(softwareint26)
#pragmainterrupt_timer_b0(vect=26)
void_timer_bO(void){}
//timerbl(softwareint27)
#pragmainterrupt_timer_bl(vect=27)
void_timer_bl(void){}
//timerb2(softwareint28)
#pragmainterrupt_tlmer_b2(vect=28)
vniri_timer_h?(void){}
//____
//into(softwareint29)
*pragmainterrupt_int0(vect=29)
void_intO(void){}
U___
//inti(softwareint30)
#pragmainterrupt_intl(vect=3O)
void_intl(void){}
//____
//int2(softwareint31)
#pragmainterrupt_int2(vect=31)
voidJnt2(void){}
//softwareint32foruserorMR30
//softv/areint33foruserorMR30
//softwareint34foruserorMR30
//softv/areint35foruserorMR30
//softwareint36foruserorMR30
//softv/areint37foruserorMR30
//softwareint38foruserorMR30
//softwareint39foruserorMR30
//softv/areint40foruserorMR30
//softwareint41foruserorMR30
//softwareint42foruserorMR30
//softwareint43foruserorMR30
//so代v/areint44foruserorMR30
//softwareint45foruserorMR30
//softwareint46foruserorMR30
//softv/areint47foruserorMR30
//softwareint48foruser
//softwareint49foruser
//softv/areint50foruser
//softv/areint51foruser
//softv/areint52foruser
//softv/areint53foruser
//softwareint54foruser
//softwareint55foruser
//softwareint56foruser
//softwareint57foruser
//softwareint58foruser
//softv/areint59foruser
//softwareint60foruser
//softv/areint61foruser
//softwareint62foruser
H<;aftwarpint63foruqar
該文件為中斷處理子程序.
我們以中口0接收中斷為例
//uartOreceive/ACKO(softwareint18)
#pragmainterrupt_uartO_receive(vect=18)
void_uartO_receive(void){}
如上,
#pragmainterrupt_uartO_receive(vect=18)
#pragma為預(yù)處理指令,該語句表不Ml6c的編詫器將_uartO_receive()函數(shù)指定為一個(gè)中斷子函數(shù),向量2為18(可以對(duì)照CPU的快件手冊(cè)
查右串口0接收中斷的向質(zhì)號(hào))
initsct.c
源代碼;
#indude"initsct.h"
voidinltsct(void);
voidinitsct(void)
(
sclear("bss_SE","data","align");
sclear("bss_SO","data","noalign");
sclear("bss_NE","data","align");
sclear("bss_NO","data",-noalign");
sclear_f("bss_FE"/data",-align");
sclear_f("bss_FO"/"data","noalign";;
//addnewsections
//bss_clear("newsectionname");
scopyC-data.SE"/'data","align");
scopy("data_SO","data","noalign").
scopy("data_NE","data","align");
scopy("data_NO"/data","noallgn"):
scopy_f("data_FE",'data",'align");
scopy_f("data_FO","data","noalign");
)
該文件為bss,data段的初始化,
共中bss為未初始化數(shù)據(jù).data為初始化「的數(shù)據(jù)
調(diào)用initsct。函數(shù)時(shí),CPU會(huì)將bss段泮零,將ROM里的初始化數(shù)據(jù)復(fù)制到data段里。
heap.c
源代碼:
/***************************;?*/
#include"typedefine.h"
#include"cstartdef.h"
#if_HEAPSIZE_!=0
#pragmaSECTIONbssheap
_URYTFhpan_arpa[_HFAPST7F_];
#endif
該文件為堆的定義.malloc。等函數(shù)將會(huì)從heap_area[_HEAPSIZE_]數(shù)組里申謂空間.
當(dāng)然,你可以定義堆的大小.
fvector.c
雙代碼?
#pragmasectaddressfvector,ROMDATAOxfffdc
#pragmainterrupt/v_dummy_int//udi
#pragmainterrupt/v_dummy_int//over_flow
#pragmainterrupt/v_dummy_int//brki
#pragmainterrupt/v_dummy_int//address_match
#pragmainterrupt/v_dummy_int//single_step
#pragmainterrupt/v_dummy_int//wdt
#pragmainterrupt/v_dummy_int//dbc
#pragmainterrupt/v_dummy_int//nmi
#pragmainterrupt/vstart
_asmC.id""V#FFFFFFFFFFFFFF\"");
#pragmainterrupt_dummy_int()
void_dummy_lnt(void){}
該文件為fixedvectortable的定義,關(guān)于fixedvector向量,可以fit石CPU的硬件『冊(cè).?佞不用更改該文件
**
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河北滄州市教育局市直4所學(xué)校選聘高層次人才21名備考筆試試題及答案解析
- 2026事業(yè)單位招聘?jìng)淇脊P試試題及答案解析
- 深度解析(2026)《GBT 26013-2010二氧化錫》
- 2025江蘇無錫市宜興市部分機(jī)關(guān)事業(yè)單位招聘編外人員3人(B類)備考筆試試題及答案解析
- 2026中國(guó)物流秋季校園招聘(福建校招39人)模擬筆試試題及答案解析
- 深度解析(2026)《GBT 25773-2010燃?xì)鈾C(jī)熔化焊技術(shù)規(guī)范》(2026年)深度解析
- 深度解析(2026)《GBT 25667.1-2010整體硬質(zhì)合金直柄麻花鉆 第1部分:直柄麻花鉆型式與尺寸》(2026年)深度解析
- 2025四川廣安岳池縣婦幼保健院招聘護(hù)士2人模擬筆試試題及答案解析
- 2025黑龍江省中醫(yī)藥科學(xué)院哈爾濱市南崗區(qū)曲線社區(qū)衛(wèi)生服務(wù)中心招聘婦保醫(yī)生1人備考考試試題及答案解析
- 2025安徽蚌埠市懷遠(yuǎn)縣教育局所屬事業(yè)單位緊缺專業(yè)人才引進(jìn)(校園招聘)22人考試備考題庫(kù)及答案解析
- 2025四川資陽現(xiàn)代農(nóng)業(yè)發(fā)展集團(tuán)有限公司招聘1人筆試歷年參考題庫(kù)附帶答案詳解
- 2025河北廊坊燕京職業(yè)技術(shù)學(xué)院選聘專任教師20名(公共基礎(chǔ)知識(shí))測(cè)試題附答案解析
- 0901 溶液顏色檢查法:2020年版 VS 2025年版對(duì)比表
- 各部門環(huán)境因素識(shí)別評(píng)價(jià)表-塑膠公司
- 2025遼寧丹東市融媒體中心下半年面向普通高校招聘急需緊缺人才5人筆試考試參考試題及答案解析
- 律所解除聘用協(xié)議書
- 2025年10月自考04184線性代數(shù)經(jīng)管類試題及答案含評(píng)分參考
- 海爾集團(tuán)預(yù)算管理實(shí)踐分析
- 煤礦2026年度安全風(fēng)險(xiǎn)辨識(shí)評(píng)估報(bào)告
- 國(guó)開2025年秋《心理學(xué)》形成性考核練習(xí)1-6答案
- 科技研發(fā)項(xiàng)目管理辦法
評(píng)論
0/150
提交評(píng)論