AKI-H8进入C语言的世界

对于大部分C程序员来说,面向硬件的编程并不是多大的问题,入力出力从printf,scanf变成了端口地址而已,其他的处理几乎一样。但是硬件也有自身的特点需要把握,譬如硬件初始化,芯片运行的模式设置,端输入输出口状态,中断是否屏蔽等都要初始化。而对于使用到特殊资源,比如计数器等还有别的特别的设置。这里只是讨论让程序跑动起来的基础设置。

1:总线宽度,通过BSC.ABWCR来设置。

2:总线方向,前面说过H8的I/O端口可以拿来做地址线,也就是说可以通过设置让某个端口为地址或入力端口。通过每个端口的P*.DDR来设置方向,用P*.DR来设置数据,或者读取数据。对于PORT2,它还有一个寄存器P2.PCR。在P2.DDR的所有位都为0且P2.PCR的某位设置为1时,相应的端口进入高抗状态。

 

对于不同的模式有不同的端口设置方式,请注意,在哪种模式下设置哪些端口具有什么属性可以参见芯片说明书。

#include<stdio.h> #include<string.h> #include"h83052.h" extern void InitLCD(); extern void _EI(); extern void _DI(); extern void PrintLCD(char *fmt,...); void Init(); void Sleep(int cnt); void main() { int nIndex ; Init() ; Sleep(0x0FF) ; PrintLCD("/fBios Ready!") ; while(1) { for(nIndex = 0 ; nIndex < 4 ; nIndex++) {   if( GetSW(nIndex) != 0 ) {     SetLED(nIndex , 0x01) ; } else { SetLED(nIndex , 0x00) ; } }   Sleep(300) ; } } void InitSys() { BSC.ABWCR = 0x06 ;/* 设置总线为16bit宽 */ P1.DDR = 0xff ; /* 地址线 */ P2.DDR = 0xff ; /* 地址线 */ P2.PCR = 0x00 ; /* P2不为上拉电,其实不用显示的设置为0,默认为0 */ /* P3.DDR = 0xff ; 在1-6的模式中,P3为数据总线P3.DDR无效,在7模式中为输入输 出端口*/ /* P4.DDR = 0xff ; 在1-6的模式中,P4根据ABWCR的设置判断自己的属性,如果被设 置为16*/ /* 位宽的总线则P4为数据总线,和P3一样,寄存器的设置无效,为模式7时为输入输出端 口 */ P5.DDR = 0xff ; P5.PCR = 0x00 ; P6.DDR = 0xff ; /* 在1-6模式中,这是一个总线控制线,模式7时为输入出线 */ /* P7是A/D,D/A转换端口,接收模拟信号时8个端口都是入力,输出数字信号时6,7号 端口出力*/ P9.DDR = 0xdf ; /* */ P8.DDR = 0xff ; PA.DDR = 0xf0 ; PB.DDR = 0xff ; } void Init() { InitSys() ; InitLCD() ; SetLED(0,0) ; SetLED(1,0) ; SetLED(2,0) ; SetLED(3,0) ; _EI() ; } void Sleep(int cnt) { int i = 0; for(i = 0; i < cnt; i++); }

你可能感兴趣的:(AKI-H8进入C语言的世界)