📄 prgframe.lst
字号:
__start:
__text_start:
8000 45 0240 ldHX #0x0240
8003 94 tXS
8004 CD 8201 jsr __HC08Setup
8007 45 0044 ldHX #0x0044
800A 65 0046 cpHX #0x0046
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 8060 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) //[GenneralFun.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 23 E0 bls 0x803D
805D A7 02 aiS #2
805F 81 rts
_main:
i --> X+0
8060 A7 FF aiS #-1
8062 95 tSX
FILE: Main.c
(0001) //-------------------------------------------------------------------------*
(0002) //工程文件名:PrgFrame.prj *
(0003) //硬件连接: *
(0004) // (1)MCU的I/O口引脚接继电器 *
(0005) //程序描述:用I/O口驱动小灯 *
(0006) //目 的:测试模拟开关 *
(0007) //说 明: *
(0008) //注 意: *
(0009) //-------------------------------------------------------------------------*
(0010)
(0011) #include "Includes.h" //总头文件
(0012) //主函数
(0013) void main()
(0014) {
8063 CD 8096 jsr _MCUInit
(0015) INT8U i;
(0016)
(0017) //1 初始化
(0018) MCUInit();
(0019) SCIInit(); //串口初始化
8066 CD 80F5 jsr _SCIInit
(0020) SwitchOutput_Init(); //模拟开关引脚初始化
8069 CD 80BE jsr _SwitchOutput_Init
806C 95 tSX
806D 20 22 bra 0x8091
(0021)
(0022) //2 程序总循环入口
(0023) while(1)
(0024) {
806F A6 44 ldA #68
8071 87 pshA
8072 A6 00 ldA #0
8074 87 pshA
8075 A6 02 ldA #2
8077 87 pshA
8078 CD 81AE jsr _SCIReN
807B A7 03 aiS #3
807D 95 tSX
807E B7 41 stA *__r1
8080 F7 stA 0,X
(0025) i=SCIReN(2,SerialBuff); //接收PC发来的2个数据
(0026) //第1个:引脚号;第2个:状态
(0027) if(i==0)
8081 26 0E bne 0x8091
(0028) SwitchOutput(SerialBuff[0],SerialBuff[1]);
8083 C6 0045 ldA _SerialBuff+1
8086 87 pshA
8087 C6 0044 ldA _SerialBuff
808A 87 pshA
808B CD 80C5 jsr _SwitchOutput
808E A7 02 aiS #2
8090 95 tSX
(0029) }
8091 20 DC bra 0x806F
8093 A7 01 aiS #1
8095 81 rts
FILE: SetUp.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:
8096 A6 01 ldA #1
8098 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;
809A A6 3D ldA #61
809C 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; //①禁止PLL:清零PLL控制寄存器PCTL
809E 3F 36 clr 0x36
(0036) PCTL=0x01; //②将P、E写入PTCL,置VCO的参考频率为2
80A0 A6 01 ldA #1
80A2 B7 36 stA 0x36
(0037) PMSH=0x01; //③将N写入PMSH、PMSL,置VCO的倍频因子为$12C
80A4 A6 01 ldA #1
80A6 B7 38 stA 0x38
(0038) PMSL=0x2C;
80A8 A6 2C ldA #44
80AA B7 39 stA 0x39
(0039) PMRS=0b10000000; //④将L写入PMRS,置VCO的输出频率范围系数为$80
80AC A6 80 ldA #-128
80AE B7 3A stA 0x3A
(0040) PRDS=0x01; //⑤将R写入PRDS
80B0 A6 01 ldA #1
80B2 B7 3B stA 0x3B
(0041) PCTL|=(1<<5); //⑥置PCTL.PLLON=1,启动PLL电路
80B4 1A 36 Bset 5,0x36
(0042) PBWC|=(1<<7); //⑦PBWC自动带宽控制位=1,选择自动控制方式
80B6 1E 37 Bset 7,0x37
(0043) PCTL|=(1<<4); //⑧PCTL.BCS=1,选择PLL电路为时钟源
80B8 18 36 Bset 4,0x36
80BA 81 rts
_isrDummy:
80BB 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) {
80BC 8A pulH
80BD 80 rti
FILE: SwitchOutput.c
(0001) //[SwitchOutput.c]开关驱动-------------------------------------------------*
(0002) //本文件包含: *
(0003) // (1)SwitchOutput_Init:定义控制开关的MCU的I/O引脚为输出 *
(0004) // (2)SwitchOutput:将某引脚模拟为开关的开闭 *
(0005) //硬件连接: *
(0006) // (1)本处的开关是接触器,由MCU的I/O引脚控制 *
(0007) // (2)控制引脚=高电平时,模拟开关的闭状态;反之,模拟开关的开状态; *
(0008) //-------------------------------------------------------------------------*
(0009)
(0010) #include"SwitchOutput.h" //该头文件中包含了开关控制引脚定义和相关函数声明
(0011)
(0012) //SwitchOutput_Init:定义控制开关的MCU引脚为输出----------------------------*
(0013) //功能:定义控制开关的MCU引脚为输出,并模拟开关初始为开 *
(0014) //参数:无 *
(0015) //返回:无 *
(0016) //-------------------------------------------------------------------------*
(0017) void SwitchOutput_Init(void)
(0018) {
_SwitchOutput_Init:
80BE A6 FF ldA #-1
80C0 B7 04 stA 0x04
(0019) SwitchOutput_D=0xFF; //令开关输出端口为输出
(0020) SwitchOutput_P=0x00; //初始输出全为低,模拟开关的开状态
80C2 3F 00 clr 0x00
80C4 81 rts
_SwitchOutput:
Status --> X+3
PinNo --> X+2
80C5 95 tSX
(0021) }
(0022)
(0023) //SwitchOutput:驱动开关"开"、"闭"------------------------------------------*
(0024) //功能:通过给某引脚设定状态来模拟开关的开闭 *
(0025) //参数:PinNo=需设定状态的引脚(0~7) *
(0026) // Status=Open,开;Status=Close,闭 *
(0027) //返回:无 *
(0028) //-------------------------------------------------------------------------*
(0029) void SwitchOutput(INT8U PinNo,INT8U Status)
(0030) {
80C6 E6 03 ldA 3,X
80C8 26 17 bne 0x80E1
(0031) if(Status==0)
(0032) SwitchOutput_P &=~(1<<PinNo); //开关“开”
80CA 6E 0140 mov #1,*__r0
80CD E6 02 ldA 2,X
80CF A4 07 and #7
80D1 27 04 beq 0x80D7
80D3 38 40 lsl *__r0
80D5 4B FC dbnzA 0x8117
80D7 33 40 com *__r0
80D9 B6 00 ldA 0x00
80DB B4 40 and *__r0
80DD B7 00 stA 0x00
80DF 20 13 bra 0x80F4
(0033) else
(0034) SwitchOutput_P |=(1<<PinNo); //开关“闭”
80E1 6E 0140 mov #1,*__r0
80E4 E6 02 ldA 2,X
80E6 A4 07 and #7
80E8 27 04 beq 0x80EE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -