⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prgframe.lst

📁 GP32启动程序
💻 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 + -