📄 prgframe.lst
字号:
__start:
__text_start:
8000 45 0240 ldHX #0x0240
8003 94 tXS
8004 CD 80D3 jsr __HC08Setup
8007 45 0044 ldHX #0x0044
800A 65 0044 cpHX #0x0044
800D 27 06 beq 0x8015
800F 6F 00 clr 0,X
8011 AF 01 aiX #1
8013 20 F5 bra 0x800A
8015 45 0045 ldHX #0x0045
8018 94 tXS
8019 45 8000 ldHX #0x8000
801C 65 8000 cpHX #0x8000
801F 27 0B beq 0x802C
8021 E6 00 ldA 0,X
8023 9EE7 00 stA 0,S
8026 AF 01 aiX #1
8028 A7 01 aiS #1
802A 20 F0 bra 0x801C
802C 45 0240 ldHX #0x0240
802F 94 tXS
8030 CD 8079 jsr _main
_exit:
8033 20 FE bra 0x8033
_Delay:
u --> X+0
k --> X+4
8035 A7 FE aiS #-2
8037 95 tSX
FILE: GeneralFun.c
(0001) //[GeneralFun.c]通用函数---------------------------------------------------*
(0002) //本文件包含: *
(0003) // (1)Delay:延时函数 *
(0004) //-------------------------------------------------------------------------*
(0005)
(0006) #include "GeneralFun.h" //该头文件中包含了类型别名定义
(0007)
(0008) //Delay:延时函数-----------------------------------------------------------*
(0009) //功 能:用程序的方法延时一段时间 *
(0010) //参 数:k = 延时长度(0-65535) *
(0011) //返 回:无 *
(0012) //-------------------------------------------------------------------------*
(0013) void Delay(INT16U k)
(0014) {
8038 6F 01 clr 1,X
803A 7F clr 0,X
803B 20 0A bra 0x8047
(0015) INT16U u;
(0016) for(u=0; u<k; u++);
803D E6 01 ldA 1,X
803F AB 01 add #1
8041 E7 01 stA 1,X
8043 F6 ldA 0,X
8044 A9 00 adc #0
8046 F7 stA 0,X
8047 E6 05 ldA 5,X
8049 B7 41 stA *__r1
804B E6 04 ldA 4,X
804D B7 40 stA *__r0
804F E6 01 ldA 1,X
8051 B7 43 stA *__r3
8053 F6 ldA 0,X
8054 B7 42 stA *__r2
8056 55 42 ldHX *__r2
8058 75 40 cpHX *__r0
805A 95 tSX
805B 25 E0 bcs 0x803D
805D A7 02 aiS #2
805F 81 rts
FILE: LED.c
(0001) //[LED.c]小灯驱动----------------------------------------------------------*
(0002) //本文件包含: *
(0003) // (1)LEDinit:定义控制小灯的MCU的I/O引脚为输出 *
(0004) // (2)LED_L_A:驱动小灯"亮","暗" *
(0005) //硬件连接: *
(0006) // (1)本处的小灯是一个发光二极管,由MCU的I/O引脚控制 *
(0007) // (2)控制引脚=高电平时,小灯"暗";反之,小灯"亮" *
(0008) //-------------------------------------------------------------------------*
(0009)
(0010) #include "LED.h" //该头文件中包含了小灯控制引脚定义和相关函数声明
(0011)
(0012) //LEDinit:定义控制小灯的MCU引脚为输出--------------------------------------*
(0013) //功能:定义控制小灯的MCU引脚为输出,并使小灯初始为暗 *
(0014) //参数:无 *
(0015) //返回:无 *
(0016) //-------------------------------------------------------------------------*
(0017) void LEDinit(void)
(0018) {
_LEDinit:
8060 12 04 Bset 1,0x04
(0019) Light_D |= 1<<Light_Pin; //令小灯引脚为输出
(0020) Light_P |= 1<<Light_Pin; //初始时,小灯"暗"
8062 12 00 Bset 1,0x00
8064 81 rts
_LED_L_A:
flag --> X+2
8065 95 tSX
(0021) }
(0022)
(0023) //LED_L_A:驱动小灯"亮","暗"------------------------------------------------*
(0024) //功能:根据flag的值控制小灯的亮和暗 *
(0025) //参数:flag(flag = 'A',小灯暗;flag = 'L',小灯亮) *
(0026) //返回:无 *
(0027) //-------------------------------------------------------------------------*
(0028) void LED_L_A(INT8U flag)
(0029) {
8066 E6 02 ldA 2,X
8068 A1 41 cmp #65
806A 26 04 bne 0x8070
(0030) if (flag == 'A')
(0031) {
806C 12 00 Bset 1,0x00
(0032) Light_P |= 1<<Light_Pin; //小灯"暗"
(0033) }
806E 20 08 bra 0x8078
(0034)
(0035) else if (flag == 'L')
8070 E6 02 ldA 2,X
8072 A1 4C cmp #76
8074 26 02 bne 0x8078
(0036) {
8076 13 00 Bclr 1,0x00
(0037) Light_P &= ~(1<<Light_Pin); //小灯"亮"
(0038) }
8078 81 rts
FILE: Main.c
(0001) //-------------------------------------------------------------------------*
(0002) //工 程 名:PrgFrame.prj *
(0003) //硬件连接: *
(0004) // (1)MCU的I/O口引脚接小灯(见"LED.c"文件说明) *
(0005) //程序描述:用I/O口控制小灯闪烁 *
(0006) //目 的:第1个freescale HC08系列MCU C语言程序框架 *
(0007) //说 明:提供Motorola MCU的编程框架,供教学入门使用 *
(0008) //注 意:如果延时不够长的话,会发觉灯不会闪烁,而是一直亮,这是由于人的 *
(0009) // 视觉的引起的. *
(0010) //------------------清华2007版《嵌入式技术基础与实践》实例-----------------*
(0011)
(0012) //总头文件
(0013) #include "Includes.h"
(0014) //主函数
(0015) void main()
(0016) {
_main:
8079 9B seI
(0017) DisableMCUint(); //禁止总中断
(0018) //1. 芯片初始化
(0019) MCUinit();
807A CD 80AB jsr _MCUinit
(0020) //2. 模块初始化
(0021) LEDinit(); //(1) 小灯控制引脚初始化
807D CD 8060 jsr _LEDinit
8080 95 tSX
8081 20 25 bra 0x80A8
(0022) //总循环
(0023) while (1)
(0024) {
8083 A6 4C ldA #76
8085 87 pshA
8086 CD 8065 jsr _LED_L_A
8089 A7 01 aiS #1
(0025) LED_L_A('L'); //小灯亮
(0026) Delay(15000); //延时
808B 45 3A98 ldHX #0x3A98
808E 89 pshX
808F 8B pshH
8090 CD 8035 jsr _Delay
8093 A7 02 aiS #2
(0027)
(0028) LED_L_A('A'); //小灯暗
8095 A6 41 ldA #65
8097 87 pshA
8098 CD 8065 jsr _LED_L_A
809B A7 01 aiS #1
(0029) Delay(15000); //延时
809D 45 3A98 ldHX #0x3A98
80A0 89 pshX
80A1 8B pshH
80A2 CD 8035 jsr _Delay
80A5 A7 02 aiS #2
80A7 95 tSX
(0030) }
80A8 20 D9 bra 0x8083
80AA 81 rts
FILE: MCUinit.c
(0001) //MCUinit:芯片初始化-------------------------------------------------------*
(0002) //功能:系统初始化设置 *
(0003) // (1)由外部晶振f,通过本程序设置内部总线频率fBUS *
(0004) // (2)确定是否禁止看门狗(COP) *
(0005) //参数:无 *
(0006) //返回:无 *
(0007) //说明:该程序与芯片具体型号有关 *
(0008) // (1)外部晶振f = 32.768kHz,使用内部PLL(锁相环),产生内部总线时钟频率 *
(0009) // fBUS = 2.4576MHz *
(0010) // (2)禁止COP模块 *
(0011) //-------------------------------------------------------------------------*
(0012)
(0013) #include "GP32C.h" //映像寄存器名定义
(0014)
(0015) void MCUinit(void)
(0016) {
_MCUinit:
80AB A6 01 ldA #1
80AD B7 1E stA 0x1E
(0017) //1.设置CONFIG2,CONFIG1
(0018) //1.1 设置CONFIG2
(0019) CONFIG2 = 0b00000001;
(0020) // ||_SCIBDSRC = 1内部总线时钟用作SCI时钟
(0021) // |__OSCSTOPENB = 0 在stop模式下禁止振荡器工作
(0022)
(0023) //1.2 设置CONFIG1
(0024) CONFIG1 = 0b00111101;
80AF A6 3D ldA #61
80B1 B7 1F stA 0x1F
(0025) //||||||||_COPD = 1 禁止COP模块
(0026) //|||||||__STOP = 0 禁止STOP指令
(0027) //||||||___SSREC = 1 32个CGMXCLK周期退出STOP模式
(0028) //|||||____LVI5OR3 = 1 LVI工作在5V
(0029) //||||_____LVIPWRD = 1 禁止LVI模块电源
(0030) //|||______LVIRSTD = 1 允许LVI复位信号
(0031) //||_______LVISTOP = 0 在stop模式下禁止LVI
(0032) //|________COPRS = 0 COP溢出范围使用长的时间
(0033)
(0034) //2.PLL编程
(0035) PCTL = 0x00; //(1)禁止PLL:清零PLL控制寄存器PCTL
80B3 3F 36 clr 0x36
(0036) PCTL = 0x01; //(2)将P,E写入PTCL,置VCO的参考频率为2
80B5 A6 01 ldA #1
80B7 B7 36 stA 0x36
(0037) PMSH = 0x01; //(3)将N写入PMSH,PMSL,置VCO的倍频因子为$12C
80B9 A6 01 ldA #1
80BB B7 38 stA 0x38
(0038) PMSL = 0x2C;
80BD A6 2C ldA #44
80BF B7 39 stA 0x39
(0039) PMRS = 0b10000000; //(4)将L写入PMRS,置VCO的输出频率范围系数为$80
80C1 A6 80 ldA #-128
80C3 B7 3A stA 0x3A
(0040) PRDS = 0x01; //(5)将R写入PRDS
80C5 A6 01 ldA #1
80C7 B7 3B stA 0x3B
(0041) PCTL |= (1 << 5); //(6)置PCTL.PLLON = 1,启动PLL电路
80C9 1A 36 Bset 5,0x36
(0042) PBWC |= (1 << 7); //(7)PBWC自动带宽控制位 = 1,选择自动控制方式
80CB 1E 37 Bset 7,0x37
(0043) PCTL |= (1 << 4); //(8)PCTL.BCS = 1,选择PLL电路为时钟源
80CD 18 36 Bset 4,0x36
80CF 81 rts
_isrDummy:
80D0 8B pshH
FILE: Vectors08.c
(0001) //[Vectors08.c]中断处理函数与中断向量表------------------------------------*
(0002) //功能: *
(0003) // (1)定义中断处理子程序 *
(0004) // (2)放置中断向量表 *
(0005) //说明:该文件与芯片具体型号有关 *
(0006) // (1)芯片型号MC68HC908GP32 *
(0007) //-------------------------------------------------------------------------*
(0008)
(0009) //此处为用户中断处理函数的存放处--------------------------------------------
(0010)
(0011) //--------------------------------------------------------------------------
(0012)
(0013) //未定义的中断处理函数,本函数不能删除
(0014) #pragma interrupt_handler isrDummy
(0015) void isrDummy(void)
(0016) {
FILE: <library>
80D1 8A pulH
80D2 80 rti
__HC08Setup:
80D3 81 rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -