📄 tg1286~1.lst
字号:
__start:
__text_start:
9046 45 0240 ldHX #0x0240
9049 94 tXS
904A CD 907B jsr __HC08Setup
904D 45 0094 ldHX #0x0094
9050 65 0094 cpHX #0x0094
9053 27 06 beq 0x905B
9055 6F 00 clr 0,X
9057 AF 01 aiX #1
9059 20 F5 bra 0x9050
905B 45 004F ldHX #0x004F
905E 94 tXS
905F 45 9000 ldHX #0x9000
9062 65 9046 cpHX #0x9046
9065 27 0B beq 0x9072
9067 E6 00 ldA 0,X
9069 9EE7 00 stA 0,S
906C AF 01 aiX #1
906E A7 01 aiS #1
9070 20 F0 bra 0x9062
9072 45 0240 ldHX #0x0240
9075 94 tXS
9076 CD 90A0 jsr _main
_exit:
9079 20 FE bra 0x9079
FILE: setup.c
(0001) /*_HC08Setup:GP32系统初始化子程序----------------------*
(0002) *功能:系统初始化设置:设置CONFIG1和CONFIG2寄存器 *
(0003) CGM的寄存器设置:由外部晶振f=32.768kHz,产生内部 *
(0004) 总线时钟2.4576MHz *
(0005) *参数:无 *
(0006) *返回:无 *
(0007) *-----------------------------------------------------*/
(0008) #include "GP32C.h" //映像寄存器地址头文件
(0009) void _HC08Setup(void)
(0010) {
__HC08Setup:
907B A6 01 ldA #1
907D B7 1E stA 0x1E
(0011) //初始化CONFIG2
(0012) CONFIG2=0b00000001; //SCIBDSRC=1内部总线时钟用作SCI
(0013) //时钟;OSCSTOPENB=0在stop模式下
(0014) //禁止振荡器工作
(0015) //初始化CONFIG1
(0016) CONFIG1=0b00111101; //COPD=1 禁止COP模块
907F A6 3D ldA #61
9081 B7 1F stA 0x1F
(0017) //STOP=0 禁止STOP指令
(0018) //SSREC=1 32个CGMXCLK周期退出
(0019) //STOP模式
(0020) //LVI5OR3=1 LVI工作在5V
(0021) //LVIPWRD=1 禁止LVI模块电源
(0022) //LVIRSTD=1 允许LVI复位信号
(0023) //LVISTOP=0 在stop模式下禁止LVI
(0024) //COPRS=0 COP溢出范围使用长的时间
(0025) PCTL=0x00; //①禁止PLL:清零PLL控制寄存器PCTL
9083 3F 36 clr 0x36
(0026) PCTL=0x01; //②将P、E写入PTCL,置VCO的参考频率
9085 A6 01 ldA #1
9087 B7 36 stA 0x36
(0027) // 为2
(0028) PMSH=0x01; //③将N写入PMSH、PMSL,置VCO的倍
9089 A6 01 ldA #1
908B B7 38 stA 0x38
(0029) // 频因子为$12C
(0030) PMSL=0x2C;
908D A6 2C ldA #44
908F B7 39 stA 0x39
(0031) PMRS=0b10000000; //④将L写入PMRS,置VCO的输出频率范
9091 A6 80 ldA #-128
9093 B7 3A stA 0x3A
(0032) // 围系数为$80
(0033) PRDS=0x01; //⑤将R写入PRDS
9095 A6 01 ldA #1
9097 B7 3B stA 0x3B
(0034) PCTL|=(1<<5); //⑥置PCTL.PLLON=1,启动PLL电路
9099 1A 36 Bset 5,0x36
(0035) PBWC|=(1<<7); //⑦PBWC自动带宽控制位=1,选择自动
909B 1E 37 Bset 7,0x37
(0036) // 控制方式
(0037) PCTL|=(1<<4); //⑧PCTL.BCS=1,选择PLL电路为时钟源
909D 18 36 Bset 4,0x36
909F 81 rts
_main:
tmp --> X+0
RF --> X+1
90A0 A7 FD aiS #-3
90A2 95 tSX
FILE: main.c
(0001) /*-----------------------------------------------------*
(0002) *工 程 名:TG12864E02.prj *
(0003) *硬件连接: 1.LCD的DB0-7与MCU的B口的PTB0-7连接 *
(0004) * 2.LCD的RS,R/W,E与MCU的PTC0,PTC1,PTC2连接 *
(0005) * 功 能:初始时显示:"苏州大学 " *
(0006) * "单片机实验室 " *
(0007) * "http://sumcu.s " *
(0008) * "uda.edu.cn " *
(0009) *-----------------------------------------------------*/
(0010)
(0011) /*[头文件]*/
(0012) #include "GP32C.h" //映像寄存器地址头文件
(0013) #include "lcd.h" //Lcd头文件
(0014) #include "SCI.h" //SCI头文件
(0015)
(0016) //有关定时器寄存器位定义
(0017) #define TSTOPBit 5 //定时器计数停止位
(0018)
(0019) //定时器初始化函数声明
(0020) void Timer1init(void);
(0021) //SCI初始化
(0022) extern void SCIInit(void);
(0023)
(0024) //全局变量声明
(0025) unsigned char Num=0; //显示的数据
(0026) unsigned char FLine=0; //得到焦点的行号
(0027) //[外部定义64个字节的Lcd显示缓冲区]
(0028) unsigned char LcdShowBuff[64]=" as "
(0029) " df "
(0030) " df "
(0031) " da ";
(0032) unsigned char YNo=0,XNo=0;
(0033) unsigned int Data=12;
(0034) //*====================================================*
(0035)
(0036) #pragma abs_address:0x8000
(0037) const INT16U BigNumCode[320]={
(0038) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0380,0x0C60, //"0"
(0039) 0x0830,0x1830,0x3018,0x3018,0x3018,0x3018,0x701C,0x701C,
(0040) 0x701C,0x701C,0x701C,0x3018,0x3018,0x3018,0x3018,0x1830,
(0041) 0x1830,0x0C60,0x0380,0x0000,0x0000,0x0000,0x0000,0x0000,
(0042) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0040,0x03C0, //"1"
(0043) 0x03C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,
(0044) 0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,0x01C0,
(0045) 0x01C0,0x01C0,0x0FF8,0x0000,0x0000,0x0000,0x0000,0x0000,
(0046) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07C0,0x1FF0, //"2"
(0047) 0x3078,0x603C,0x403C,0x001C,0x001C,0x001C,0x0018,0x0038,
(0048) 0x0030,0x0060,0x0040,0x00C0,0x0180,0x0300,0x0600,0x0C02,
(0049) 0x1806,0x3FFC,0x7FFC,0x0000,0x0000,0x0000,0x0000,0x0000,
(0050) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07C0,0x0FF0, //"3"
(0051) 0x1878,0x2038,0x0018,0x0018,0x0010,0x0020,0x0040,0x01F0,
(0052) 0x07F8,0x00F8,0x003C,0x001C,0x000C,0x000C,0x000C,0x0008,
(0053) 0x3810,0x3C20,0x1FC0,0x0000,0x0000,0x0000,0x0000,0x0000,
(0054) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0030,0x0070, //"4"
(0055) 0x00F0,0x00F0,0x0170,0x0170,0x0270,0x0470,0x0470,0x0870,
(0056) 0x1870,0x1070,0x2070,0x6070,0x7FFE,0x7FFE,0x0070,0x0070,
(0057) 0x0070,0x0070,0x0070,0x0000,0x0000,0x0000,0x0000,0x0000,
(0058) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x03F8,0x07F0, //"5"
(0059) 0x07F0,0x0800,0x0800,0x1E00,0x1F80,0x3FE0,0x03F0,0x00F0,
(0060) 0x0078,0x0038,0x0018,0x0018,0x0018,0x0018,0x0010,0x0030,
(0061) 0x3060,0x3FC0,0x1F00,0x0000,0x0000,0x0000,0x0000,0x0000,
(0062) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x003C,0x00E0, //"6"
(0063) 0x0380,0x0700,0x0E00,0x1C00,0x1800,0x3800,0x33E0,0x7C70,
(0064) 0x7038,0x703C,0x701C,0x701C,0x701C,0x701C,0x301C,0x3818,
(0065) 0x1830,0x0C70,0x07C0,0x0000,0x0000,0x0000,0x0000,0x0000,
(0066) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x1FFE,0x3FFE, //"7"
(0067) 0x3FFC,0x200C,0x401C,0x0018,0x0018,0x0038,0x0030,0x0030,
(0068) 0x0070,0x0060,0x0060,0x00E0,0x00C0,0x00C0,0x01C0,0x0180,
(0069) 0x0180,0x0380,0x0300,0x0000,0x0000,0x0000,0x0000,0x0000,
(0070) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07E0,0x0C38, //"8"
(0071) 0x1818,0x381C,0x381C,0x381C,0x3C38,0x1E30,0x0F60,0x0780,
(0072) 0x03E0,0x05F0,0x0CF8,0x1878,0x383C,0x381C,0x381C,0x381C,
(0073) 0x1C18,0x0E30,0x07E0,0x0000,0x0000,0x0000,0x0000,0x0000,
(0074) 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x07C0,0x0C70, //"9"
(0075) 0x1838,0x301C,0x701C,0x700E,0x700E,0x700E,0x700E,0x780E,
(0076) 0x380E,0x1C1E,0x0FEC,0x001C,0x0038,0x0030,0x0070,0x00E0,
(0077) 0x0180,0x0F00,0x7800,0x0000,0x0000,0x0000,0x0000,0x0000};
(0078) #pragma end_abs_address
(0079)
(0080) /*[主函数]*/
(0081) void main()
(0082) {
90A3 9B seI
(0083) unsigned char *RF; //接收标志
(0084) unsigned char tmp; //行号标志
(0085) asm("SEI"); //关总中断
(0086) Timer1init(); //调定时器1初始化子程序
90A4 CD 90F3 jsr _Timer1init
(0087) Lcdinit(); //Lcd初始化
90A7 CD 9182 jsr _Lcdinit
(0088) SCIInit(); //SCI初始化
90AA CD 989F jsr _SCIInit
90AD 95 tSX
(0089) asm("CLI"); //开总中断
90AE 9A clI
90AF 20 3D bra 0x90EE
(0090) //[主循环]
(0091) //循环等待接收
(0092) while(1)
(0093) {
90B1 A6 56 ldA #86
90B3 87 pshA
90B4 CD 97A0 jsr _SCISend1
90B7 A7 01 aiS #1
90B9 95 tSX
(0094) //LcdShBigCh(0,0,(INT16U *)(BigChCode_NUM[Num]));
(0095) //tmp=SCIRe1(RF);
(0096) //if(tmp!=0xFF) Num=tmp;
(0097) //SCISend1(Num);
(0098)
(0099) SCISend1(86);
(0100) if(SCIRe1(RF)!=56) continue;
90BA E6 02 ldA 2,X
90BC 87 pshA
90BD E6 01 ldA 1,X
90BF 87 pshA
90C0 CD 97ED jsr _SCIRe1
90C3 A7 02 aiS #2
90C5 95 tSX
90C6 B7 41 stA *__r1
90C8 A1 38 cmp #56
90CA 27 02 beq 0x90CE
90CC 20 20 bra 0x90EE
(0101) YNo=SCIRe1(RF);
90CE E6 02 ldA 2,X
90D0 87 pshA
90D1 E6 01 ldA 1,X
90D3 87 pshA
90D4 CD 97ED jsr _SCIRe1
90D7 A7 02 aiS #2
90D9 95 tSX
90DA B7 41 stA *__r1
90DC B7 90 stA 0xFFFFFF90
(0102) XNo=SCIRe1(RF);
90DE E6 02 ldA 2,X
90E0 87 pshA
90E1 E6 01 ldA 1,X
90E3 87 pshA
90E4 CD 97ED jsr _SCIRe1
90E7 A7 02 aiS #2
90E9 95 tSX
90EA B7 41 stA *__r1
90EC B7 91 stA 0xFFFFFF91
(0103)
(0104) /*
(0105) if(LN==1) //将接收到的数据放在第一行显示缓冲区
(0106) SCIReN(16,LcdShowBuff);
(0107) else if(LN==2)//将接收到的数据放在第二行显示缓冲区
(0108) SCIReN(16,LcdShowBuff+16);
(0109) else if(LN==3)//将接收到的数据放在第三行显示缓冲区
(0110) SCIReN(16,LcdShowBuff+32);
(0111) else if(LN==4)//将接收到的数据放在第四行显示缓冲区
(0112) SCIReN(16,LcdShowBuff+48);
(0113) */
(0114) }
90EE 20 C1 bra 0x90B1
90F0 A7 03 aiS #3
90F2 81 rts
(0115) }
(0116)
(0117) /*[内部直接调用子程序存放处]*/
(0118) /*Timer1init:定时器1初始化子程序-----------------------*
(0119) *功能:对定时器1初始化 *
(0120) *参数:无 *
(0121) *返回:无 *
(0122) *-----------------------------------------------------*/
(0123) void Timer1init(void)
(0124) {
_Timer1init:
90F3 A6 66 ldA #102
90F5 B7 20 stA 0x20
(0125) //允许溢出中断、不启动计数、分频因子=64
(0126) T1SC=0b01100110;
(0127) //计数寄存器初值=0x0000
(0128) T1CNTH=0x00; T1CNTL=0x00;
90F7 3F 21 clr 0x21
90F9 3F 22 clr 0x22
(0129) //1/2秒产生1次溢出中断
(0130) //计数寄存器=1/2×(2457600/64)=1200
(0131) T1MODH=0x12; T1MODL=0x00;
90FB A6 12 ldA #18
90FD B7 23 stA 0x23
90FF 3F 24 clr 0x24
(0132) //允许定时器1计数寄存器计数
(0133) T1SC&=~(1<<TSTOPBit);
9101 1B 20 Bclr 5,0x20
9103 81 rts
_isrTIMER1:
9104 8B pshH
9105 B6 40 ldA *__r0
9107 87 pshA
9108 B6 41 ldA *__r1
910A 87 pshA
910B B6 42 ldA *__r2
910D 87 pshA
910E B6 43 ldA *__r3
9110 87 pshA
9111 B6 44 ldA *__r4
9113 87 pshA
9114 B6 45 ldA *__r5
9116 87 pshA
9117 B6 46 ldA *__r6
9119 87 pshA
911A B6 47 ldA *__r7
911C 87 pshA
911D B6 48 ldA *__r8
911F 87 pshA
9120 B6 49 ldA *__r9
9122 87 pshA
9123 B6 4A ldA *__r10
9125 87 pshA
9126 B6 4B ldA *__r11
9128 87 pshA
9129 B6 4C ldA *__rhi
912B 87 pshA
912C B6 4D ldA *__rlo
912E 87 pshA
FILE: vectors08.c
(0001) /*-----------------------------------------------------*
(0002) *文件名:vectors08.c *
(0003) *功 能:用于定义中断矢量表 *
(0004) *-----------------------------------------------------*/
(0005) //[头文件]
(0006) #include "GP32C.H" //包含头文件
(0007) #include "lcd.h" //包含Lcd头文件
(0008) /*[定时器相应寄存器定义]*/
(0009) #define TOFBit 7 //定时器溢出标志位
(0010)
(0011) //变量声明
(0012) //得到焦点的行号
(0013) //extern unsigned char FLine;
(0014) //[外部定义64个字节的Lcd显示缓冲区]
(0015) extern unsigned char LcdShowBuff[];
(0016) extern const INT16U BigNumCode[10][32];
(0017) extern INT8U Num;
(0018) extern unsigned char YNo,XNo;
(0019) extern unsigned int Data;
(0020)
(0021) //定时器1中断处理函数
(0022) #pragma interrupt_handler isrTIMER1
(0023) void isrTIMER1(void)
(0024) {
912F 9B seI
(0025) asm("SEI"); //关总中断
(0026) //通过实验,把刷新时间间隔置为1/2秒
(0027) //定时刷新Lcd显示缓冲中的数据
(0028) LcdShCh(LcdShowBuff);
9130 45 0050 ldHX #0x0050
9133 89 pshX
9134 8B pshH
9135 CD 91C9 jsr _LcdShCh
9138 A7 02 aiS #2
(0029) //在Lcd上显示自定义32*16点阵的字符
(0030) LcdShBigNum(YNo,XNo,(INT16U *)BigNumCode,Data);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -