📄 h08sci_1.lst
字号:
__start:
__text_start:
8000 45 0240 ldHX #0x0240
8003 94 tXS
8004 CD 8035 jsr __HC08Setup
8007 45 0044 ldHX #0x0044
800A 65 0045 cpHX #0x0045
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 805A jsr _main
_exit:
8033 20 FE bra 0x8033
FILE: setup.c
(0001) /*_HC08Setup:GP32系统初始化子程序------------------------------------------*
(0002) *功能:系统初始化设置:设置CONFIG1和CONFIG2寄存器 *
(0003) * CGM的寄存器设置:由外部晶振f=32.768kHz,产生内部总线时钟2.4576MHz *
(0004) *参数:无 *
(0005) *返回:无 *
(0006) *-------------------------------------------------------------------------*/
(0007) #include "GP32C.h" //映像寄存器地址头文件
(0008) void _HC08Setup(void)
(0009) {
__HC08Setup:
8035 A6 01 ldA #1
8037 B7 1E stA 0x1E
(0010) //(1)初始化CONFIG2
(0011) CONFIG2=0b00000001; //SCIBDSRC=1内部总线时钟用作SCI
(0012) //时钟;OSCSTOPENB=0在stop模式下
(0013) //禁止振荡器工作
(0014) //(2)初始化CONFIG1
(0015) CONFIG1=0b00111101;//COPD=1 禁止COP模块
8039 A6 3D ldA #61
803B B7 1F stA 0x1F
(0016) //STOP=0 禁止STOP指令
(0017) //SSREC=1 32个CGMXCLK周期退出
(0018) //STOP模式
(0019) //LVI5OR3=1 LVI工作在5V
(0020) //LVIPWRD=1 禁止LVI模块电源
(0021) //LVIRSTD=1 允许LVI复位信号
(0022) //LVISTOP=0 在stop模式下禁止LVI
(0023) //COPRS=0 COP溢出范围使用长的时间
(0024) //(3)设置PLL分频
(0025) PCTL=0x00; //①禁止PLL:清零PLL控制寄存器PCTL
803D 3F 36 clr 0x36
(0026) PCTL=0x01; //②将P、E写入PTCL,置VCO的参考频率
803F A6 01 ldA #1
8041 B7 36 stA 0x36
(0027) // 为2
(0028) PMSH=0x01; //③将N写入PMSH、PMSL,置VCO的倍
8043 A6 01 ldA #1
8045 B7 38 stA 0x38
(0029) // 频因子为$12C
(0030) PMSL=0x2C;
8047 A6 2C ldA #44
8049 B7 39 stA 0x39
(0031) PMRS=0b10000000; //④将L写入PMRS,置VCO的输出频率范
804B A6 80 ldA #-128
804D B7 3A stA 0x3A
(0032) // 围系数为$80
(0033) PRDS=0x01; //⑤将R写入PRDS
804F A6 01 ldA #1
8051 B7 3B stA 0x3B
(0034) PCTL|=(1<<5); //⑥置PCTL.PLLON=1,启动PLL电路
8053 1A 36 Bset 5,0x36
(0035) PBWC|=(1<<7); //⑦PBWC自动带宽控制位=1,选择自动
8055 1E 37 Bset 7,0x37
(0036) // 控制方式
(0037) PCTL|=(1<<4); //⑧PCTL.BCS=1,选择PLL电路为时钟源
8057 18 36 Bset 4,0x36
8059 81 rts
_main:
i --> X+0
805A A7 FF aiS #-1
805C 95 tSX
FILE: main.c
(0001) /*-------------------------------------------------------------------------*
(0002) *工程名:H08SCI_1.prj *
(0003) *编程者:葛强 *
(0004) *单 位:苏州大学freescale MCU&DSP研发中心 *
(0005) *日 期:2006.11.20 *
(0006) *本工程包含文件: *
(0007) * main.c:主程序文件 *
(0008) * Setup.c:MCU初始化子程序文件 *
(0009) * GP32C.H:MCU映像寄存器地址头文件 *
(0010) * SCI.h:串行通信子程序头文件 *
(0011) * SCI.c:串行通信子程序文件 *
(0012) *硬件连接:将PC串口和扩展版串口相连 *
(0013) *程序描述:把收到的数据发送回去 *
(0014) *目 的:初步掌握利用查询方式进行串行通信的基本知识 *
(0015) *说 明:无 *
(0016) *注 意:无 *
(0017) *--------------------《嵌入式应用技术基础教程》教学实例-------------------*/
(0018)
(0019)
(0020) /*头文件*/
(0021) #include "GP32C.H" //包含头文件
(0022) #include "SCI.h" //串行通信子程序头文件
(0023) #include "SCIInit.h" //串口初始化
(0024) /*[内存变量声明]*/
(0025) unsigned char SerialBuff[]; //存放接收数据的数组
(0026) /*[主程序]*/
(0027) void main()
(0028) {
805D CD 8089 jsr _SCIInit
8060 95 tSX
8061 20 21 bra 0x8084
(0029) unsigned char i;
(0030) //调串行口初始化子程序
(0031) SCIInit();
(0032) while(1)
(0033) {
8063 45 0044 ldHX #0x0044
8066 89 pshX
8067 8B pshH
8068 A6 01 ldA #1
806A 87 pshA
806B CD 8142 jsr _SCIReN
806E A7 03 aiS #3
8070 95 tSX
8071 B7 41 stA *__r1
8073 F7 stA 0,X
(0034) //接收1个数据
(0035) i=SCIReN(1,SerialBuff);
(0036) //发送接到的数据
(0037) if(i==0)
8074 26 0E bne 0x8084
(0038) SCISendN(1,SerialBuff);
8076 45 0044 ldHX #0x0044
8079 89 pshX
807A 8B pshH
807B A6 01 ldA #1
807D 87 pshA
807E CD 80A5 jsr _SCISendN
8081 A7 03 aiS #3
8083 95 tSX
(0039) }
8084 20 DD bra 0x8063
8086 A7 01 aiS #1
8088 81 rts
FILE: SCIInit.c
(0001) /*SCIInit:串行口初始化子程序-----------------------------------------------*
(0002) *功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位数据,无校验等 *
(0003) * 允许发送器允许接收器.查询方式收发,波特率为9600(设fBUS=2.4576MHz) * *
(0004) *参 数:无 *
(0005) *返 回:无 *
(0006) *-------------------------------------------------------------------------*/
(0007) #include "SCIInit.h"
(0008) void SCIInit(void)
(0009) { //(1)总线频率fBUS=2.4576MHz,定义波特率Bt=9600
_SCIInit:
8089 A6 02 ldA #2
808B B7 19 stA 0x19
(0010) SCBR=0b00000010;
(0011) //(2)设置允许SCI,正常码输出、8位数据、无校验
(0012) SCC1=0b01000000;
808D A6 40 ldA #64
808F B7 13 stA 0x13
(0013) //(3)设置允许发送、允许接收,查询方式收发
(0014) SCC2=0b00001100;
8091 A6 0C ldA #12
8093 B7 14 stA 0x14
8095 81 rts
_SCISend1:
o --> X+2
8096 95 tSX
FILE: SCI.c
(0001) /*-------------------------------------------------------------------------*
(0002) *文件描述:本文件包含了串行通信的4子程序,分别为: *
(0003) *(1)SCISend1:串行发送1字节 *
(0004) *(2)SCISendN:串行发送n字节 *
(0005) *(3)SCIRe1:串行接收1字节 *
(0006) *(4)SCIReN:串行接收n字节 *
(0007) *----------------------《嵌入式应用技术基础教程》-------------------------*/
(0008)
(0009) /*[包含头文件]*/
(0010) #include "SCI.h"
(0011) /*SCISend1:串行发送1个字节-------------------------------------------------*
(0012) *功 能:串行发送1个字节 *
(0013) *参 数:要发送的数据 *
(0014) *返 回:无 *
(0015) *-------------------------------------------------------------------------*/
(0016) void SCISend1(unsigned char o)
(0017) {
8097 20 09 bra 0x80A2
(0018) //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
(0019) while(1)
(0020) if ((ReSendStatusR & (1<<SendTestBit)) != 0)
8099 0F 1606 BRclr 7,0x16,0x80A2
(0021) {
809C E6 02 ldA 2,X
809E B7 18 stA 0x18
(0022) ReSendDataR=o;
(0023) break;
80A0 20 02 bra 0x80A4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -