7:编写C语言代码
对于大部分C程序员来说,面向硬件的编程并不是多大的问题,入力出力从printf,scanf变成了端口地址而已,其他的处理几乎一样。但是硬件也有自身的特点需要把握,譬如硬件初始化,芯片运行的模式设置,端输入输出口状态,中断是否屏蔽等都要初始化。而对于使用到特殊资源,比如计数器等还有别的特别的设置。这里只是讨论让程序跑动起来的基础设置。
1:总线宽度,通过BSC.ABWCR来设置。
2:总线方向,前面说过H8的I\O端口可以拿来做地址线,也就是说可以通过设置让某个端口为地址或入力端口。通过每个端口的P*.DDR来设置方向,用P*.DR来设置数据,或者读取数据。对于PORT2,它还有一个寄存器P2.PCR。在P2.DDR的所有位都为0且P2.PCR的某位设置为1时,相应的端口进入高抗状态。
对于不同的模式有不同的端口设置方式,请注意,在哪种模式下设置哪些端口具有什么属性可以参见芯片说明书。
1 #include<stdio.h>
2 #include<string.h>
3 #include"h83052.h"
4
5 extern void InitLCD();
6 extern void EnableInterrupt();
7 extern void PrintLCD(char *fmt,...);
8
9 void Init();
10 void Sleep(int cnt);
11
12 void main()
13 {
14 int nIndex ;
15
16 Init() ;
17 Sleep(0x0FF) ;
18
19 PrintLCD("\fBios Ready!") ;
20
21 while(1)
22 {
23 for(nIndex = 0 ; nIndex < 4 ; nIndex++)
24 {
25 if( GetSW(nIndex) != 0 )
26 {
27 SetLED(nIndex , 0x01) ;
28 }
29 else
30 {
31 SetLED(nIndex , 0x00) ;
32 }
33 }
34
35 Sleep(300) ;
36 }
37 }
38
39 void InitSys()
40 {
41 BSC.ABWCR = 0x06 ;/* 设置总线为16bit宽 */
42
43 P1.DDR = 0xff ; /* 地址线 */
44 P2.DDR = 0xff ; /* 地址线 */
45 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时为输入输出端口 */
46 P5.DDR = 0xff ;
47 P5.PCR = 0x00 ;
48 P6.DDR = 0xff ; /* 在1-6模式中,这是一个总线控制线,模式7时为输入出线 *//* P7是A/D,D/A转换端口,接收模拟信号时8个端口都是入力,输出数字信号时6,7号端口出力*/
49 P9.DDR = 0xdf ; /* */
50 P8.DDR = 0xff ;
51 PA.DDR = 0xf0 ;
52 PB.DDR = 0xff ;
53 }
54
55 void Init()
56 {
57 InitSys() ;
58 InitLCD() ;
59
60 SetLED(0,0) ;
61 SetLED(1,0) ;
62 SetLED(2,0) ;
63 SetLED(3,0) ;
64
65 EnableInterrupt() ;
66 }
67
68 void Sleep(int cnt)
69 {
70 int i = 0;
71 for(i = 0; i < cnt; i++);
72 }
(以上)

浙公网安备 33010602011771号