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

📄 flash.lst

📁 项目是为日本瑞萨工作所做的BAKE炉温控系统 整个文件夹包括设计文档
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    9000 45 0240      ldHX	#0x0240
    9003 94           tXS	
    9004 CD 9035      jsr	__HC08Setup
    9007 45 0046      ldHX	#0x0046
    900A 65 0091      cpHX	#0x0091
    900D 27 06        beq	0x9015
    900F 6F 00        clr	0,X
    9011 AF 01        aiX	#1
    9013 20 F5        bra	0x900A
    9015 45 0047      ldHX	#0x0047
    9018 94           tXS	
    9019 45 9000      ldHX	#0x9000
    901C 65 9000      cpHX	#0x9000
    901F 27 0B        beq	0x902C
    9021 E6 00        ldA	0,X
    9023 9EE7 00      stA	0,S
    9026 AF 01        aiX	#1
    9028 A7 01        aiS	#1
    902A 20 F0        bra	0x901C
    902C 45 0240      ldHX	#0x0240
    902F 94           tXS	
    9030 CD 905A      jsr	_main
_exit:
    9033 20 FE        bra	0x9033
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:
    9035 A6 01        ldA	#1
    9037 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模块
    9039 A6 3D        ldA	#61
    903B 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             
    903D 3F 36        clr	0x36
(0026)    PCTL=0x01;         //②将P、E写入PTCL,置VCO的参考频率
    903F A6 01        ldA	#1
    9041 B7 36        stA	0x36
(0027)                       //  为2             
(0028)    PMSH=0x01;         //③将N写入PMSH、PMSL,置VCO的倍
    9043 A6 01        ldA	#1
    9045 B7 38        stA	0x38
(0029)                       //  频因子为$12C          
(0030)    PMSL=0x2C;             
    9047 A6 2C        ldA	#44
    9049 B7 39        stA	0x39
(0031)    PMRS=0b10000000;   //④将L写入PMRS,置VCO的输出频率范
    904B A6 80        ldA	#-128
    904D B7 3A        stA	0x3A
(0032)                       //  围系数为$80   
(0033)    PRDS=0x01;         //⑤将R写入PRDS
    904F A6 01        ldA	#1
    9051 B7 3B        stA	0x3B
(0034)    PCTL|=(1<<5);      //⑥置PCTL.PLLON=1,启动PLL电路  
    9053 1A 36        Bset	5,0x36
(0035)    PBWC|=(1<<7);      //⑦PBWC自动带宽控制位=1,选择自动
    9055 1E 37        Bset	7,0x37
(0036)                       //  控制方式  
(0037)    PCTL|=(1<<4);      //⑧PCTL.BCS=1,选择PLL电路为时钟源
    9057 18 36        Bset	4,0x36
    9059 81           rts	
_main:
  i                    --> X+0
  p                    --> X+1
    905A A7 FD        aiS	#-3
    905C 95           tSX	
FILE: main.c
(0001) /*-----------------------------------------------------*
(0002) *工 程 名:Flash.prj                                    *
(0003) *硬件连接:无                                           *
(0004) *功  能:                                              *
(0005) *    1.等待接收N+1个数,并放入N和data数组中             *
(0006) *    2.擦除以addr为首地址的Flash一页,将N个数据写入     *
(0007) *    3.从以addr为首址的Flash区读取N个数据,串口发送    *
(0008) *说  明:                                               *
(0009) *    1.与Visual Basic 6.0 程序Flash_Test.vbp联合运行   *
(0010) *    2.擦/写函数中用来暂存写入或擦除程序的首末地址的   *
(0011) *      变量pbase,pend;用来暂存待写入或擦除的Flash首    *
(0012) *      地址faddr;用来存放写入的数据个数N和写入的数据   *
(0013) *      data[]必须在main函数中定义,否则将出错           *
(0014) *    3.调用擦/写子程序之前先将待擦/写页后一页开始的    *
(0015) *       所有区域写保护                                 *
(0016) *------------------------------------------------------*
(0017) /*[头文件]*/
(0018) #include "SCI.h"           //串行通信子程序头文件
(0019) #include "GP32C.h"         //包含头文件
(0020) #include "flash.h"         //包含头文件
(0021) #include "SCIInit.h"         //包含头文件
(0022) //UINT16 g_bBegin, g_bEnd, g_pAddress;
(0023) //函数声明
(0024) 
(0025) //内存变量声明
(0026) unsigned char N,data[64]; //N:写入FLASH的数据个数
(0027)                           //data:将写入flash的数据
(0028) //主程序
(0029) void main()
(0030)   {
    905D CD 91DD      jsr	_SCIInit
    9060 95           tSX	
    9061 20 73        bra	0x90D6
(0031)     unsigned char i;
(0032)     unsigned char *p;
(0033)     SCIInit();            //调串行口初始化子程序
(0034)     //主循环开始
(0035)     while(1)
(0036)     {  
    9063 A6 56        ldA	#86
    9065 87           pshA	
    9066 CD 90DE      jsr	_SCISend1
    9069 A7 01        aiS	#1
    906B 95           tSX	
(0037)       SCISend1(86);       //发送握手信号86
(0038)       //等待接收一个字节的握手信号
(0039)       if(SCIRe1(p)!=56)   //是否是56?
    906C E6 02        ldA	2,X
    906E 87           pshA	
    906F E6 01        ldA	1,X
    9071 87           pshA	
    9072 CD 912B      jsr	_SCIRe1
    9075 A7 02        aiS	#2
    9077 95           tSX	
    9078 B7 41        stA	*__r1
    907A A1 38        cmp	#56
    907C 27 02        beq	0x9080
(0040)         continue;         //否,继续握手      
    907E 20 56        bra	0x90D6
(0041)       //等待接收写入的数据个数(N<=128)并存放到N中
(0042)       SCIReN(1,data);
    9080 45 0046      ldHX	#0x0046
    9083 89           pshX	
    9084 8B           pshH	
    9085 A6 01        ldA	#1
    9087 87           pshA	
    9088 CD 918A      jsr	_SCIReN
    908B A7 03        aiS	#3
(0043)       N=data[0];
    908D 4E 4686      mov	*_data,0x86
(0044)       //等待接收N个字节的数据并存放到以data数组中
(0045)       SCIReN(N,data);
    9090 45 0046      ldHX	#0x0046
    9093 89           pshX	
    9094 8B           pshH	
    9095 B6 86        ldA	0xFFFFFF86
    9097 87           pshA	
    9098 CD 918A      jsr	_SCIReN
    909B A7 03        aiS	#3
(0046)       //调用EarseFlash()程序之前要保护后一页之后的区域
(0047)       //如:EarseFlash(0x8000),则要保护的为$8100后的区域
(0048)       FLBPR=0b00000010;   //保护$8100~$FFFF的FLASH区域
    909D A6 02        ldA	#2
    909F C7 FF7E      stA	0xFF7E
(0049)       EraseFlash((UINT8 *)0x8000);	//擦除0x8000为始址的一个页
    90A2 45 8000      ldHX	#0x8000
    90A5 89           pshX	
    90A6 8B           pshH	
    90A7 CD 91F4      jsr	_EraseFlash
    90AA A7 02        aiS	#2
(0050)       //调用WriteFlash()程序之前要保护后一页之后的区域
(0051)       //如:WriteFlash(0x8000),则要保护的为$8100后的区域
(0052)       FLBPR=0b00000010;   //保护$8100~$FFFF的FLASH区域
    90AC A6 02        ldA	#2
    90AE C7 FF7E      stA	0xFF7E
(0053)       WriteFlash((UINT8 *)0x8000, data,N);
    90B1 3F 40        clr	*__r0
    90B3 B6 86        ldA	0xFFFFFF86
    90B5 87           pshA	
    90B6 B6 40        ldA	*__r0
    90B8 87           pshA	
    90B9 45 0046      ldHX	#0x0046
    90BC 89           pshX	
    90BD 8B           pshH	
    90BE 45 8000      ldHX	#0x8000
    90C1 89           pshX	
    90C2 8B           pshH	
    90C3 CD 926B      jsr	_WriteFlash
    90C6 A7 06        aiS	#6
(0054)       //读出flash中的数据发给pc机比较 
(0055)       SCISendN(N,(unsigned char *)0x8000);
    90C8 45 8000      ldHX	#0x8000
    90CB 89           pshX	
    90CC 8B           pshH	
    90CD B6 86        ldA	0xFFFFFF86
    90CF 87           pshA	
    90D0 CD 90ED      jsr	_SCISendN
    90D3 A7 03        aiS	#3
    90D5 95           tSX	
(0056)      }           
    90D6 20 8B        bra	0x9063
    90D8 A7 03        aiS	#3
    90DA 81           rts	
_isrDummy:
    90DB 8B           pshH	
FILE: vectors08.c
(0001) /*-----------------------------------------------------*
(0002) *文件名:vectors08.c                                    *
(0003) *功  能:用于定义中断矢量表                             *
(0004) *-----------------------------------------------------*/
(0005) //[头文件]
(0006) #include "GP32C.H"          //包含头文件
(0007) //未定义的中断处理函数,本函数不能删除
(0008) #pragma interrupt_handler isrDummy  
(0009) void isrDummy(void) 
(0010)   {
    90DC 8A           pulH	
    90DD 80           rti	
_SCISend1:
  o                    --> X+2
    90DE 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) #include "SCI.h"
(0009) 
(0010) void SCISend1(unsigned char o)
(0011) {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
    90DF 20 09        bra	0x90EA
(0012) 	while(1)
(0013) 	{
    90E1 0F 1606      BRclr	7,0x16,0x90EA
(0014) 		if ((ReSendStatusR & (1 << SendTestBit)) != 0)
(0015) 		{ 
    90E4 E6 02        ldA	2,X
    90E6 B7 18        stA	0x18
(0016) 			ReSendDataR = o;
(0017) 			break;
    90E8 20 02        bra	0x90EC
(0018) 		}
(0019) 	}
    90EA 20 F5        bra	0x90E1
    90EC 81           rts	
_SCISendN:
  i                    --> X+0
  ch                   --> X+5
  n                    --> X+4
    90ED A7 FE        aiS	#-2
    90EF 95           tSX	
(0020) }
(0021) 
(0022) void SCISendN(unsigned char n,unsigned char ch[])
(0023) {
    90F0 6F 01        clr	1,X
    90F2 7F           clr	0,X
    90F3 20 1F        bra	0x9114
(0024) 	int i;
(0025) 	for(i = 0; i < n; i++)          
(0026) 		SCISend1(ch[i]);
    90F5 E6 01        ldA	1,X
    90F7 EB 06        add	6,X
    90F9 B7 41        stA	*__r1
    90FB F6           ldA	0,X
    90FC E9 05        adc	5,X
    90FE B7 40        stA	*__r0
    9100 55 40        ldHX	*__r0
    9102 F6           ldA	0,X
    9103 87           pshA	
    9104 CD 90DE      jsr	_SCISend1
    9107 A7 01        aiS	#1
    9109 95           tSX	
    910A E6 01        ldA	1,X
    910C AB 01        add	#1
    910E E7 01        stA	1,X
    9110 F6           ldA	0,X
    9111 A9 00        adc	#0
    9113 F7           stA	0,X
    9114 3F 40        clr	*__r0
    9116 E6 04        ldA	4,X
    9118 B7 41        stA	*__r1
    911A E6 01        ldA	1,X
    911C B7 43        stA	*__r3
    911E F6           ldA	0,X
    911F B7 42        stA	*__r2
    9121 55 42        ldHX	*__r2
    9123 75 40        cpHX	*__r0
    9125 95           tSX	
    9126 91 CD        blt	0x90F5
    9128 A7 02        aiS	#2
    912A 81           rts	
_SCIRe1:
  i                    --> X+0
  k                    --> X+1
  p                    --> X+5
    912B A7 FD        aiS	#-3
    912D 95           tSX	
(0027) }
(0028) 
(0029) unsigned char SCIRe1(unsigned char *p)
(0030) { 
    912E 6F 02        clr	2,X
    9130 6F 01        clr	1,X
    9132 20 21        bra	0x9155
(0031) 	unsigned int k;
(0032) 	unsigned char i;
(0033) 	//ReStatusR第ReTestBit位为1表示可接收数据
(0034) 	for(k = 0; k< 0xfbbb; k++)
(0035) 	{
    9134 0B 1612      BRclr	5,0x16,0x9149
(0036) 		if ((ReSendStatusR & (1 << ReTestBit)) != 0)
(0037) 		{
    9137 B6 18        ldA	0x18
    9139 F7           stA	0,X
(0038) 			i = ReSendDataR;
(0039) 			*p = 0x00; 
    913A E6 06        ldA	6,X
    913C B7 41        stA	*__r1
    913E E6 05        ldA	5,X
    9140 B7 40        stA	*__r0
    9142 4F           clrA	
    9143 55 40        ldHX	*__r0
    9145 F7           stA	0,X
    9146 95           tSX	
(0040) 			break;
    9147 20 1C        bra	0x9165
(0041) 		} 
(0042) 	}
    9149 E6 02        ldA	2,X
    914B AB 01        add	#1
    914D E7 02        stA	2,X
    914F E6 01        ldA	1,X
    9151 A9 00        adc	#0
    9153 E7 01        stA	1,X
    9155 E6 02        ldA	2,X
    9157 B7 41        stA	*__r1
    9159 E6 01        ldA	1,X
    915B B7 40        stA	*__r0
    915D 55 40        ldHX	*__r0
    915F 65 FBBB      cpHX	#0xFBBB
    9162 95           tSX	
    9163 25 CF        bcs	0x9134
(0043) 	if(k >= 0xfbbb) 
    9165 E6 02        ldA	2,X
    9167 B7 41        stA	*__r1
    9169 E6 01        ldA	1,X
    916B B7 40        stA	*__r0
    916D 55 40        ldHX	*__r0
    916F 65 FBBB      cpHX	#0xFBBB
    9172 95           tSX	
    9173 25 11        bcs	0x9186
(0044) 	{
    9175 A6 FF        ldA	#-1
    9177 F7           stA	0,X
(0045) 		i = 0xff;
(0046) 		*p = 0x01;
    9178 E6 06        ldA	6,X
    917A B7 41        stA	*__r1
    917C E6 05        ldA	5,X
    917E B7 40        stA	*__r0
    9180 A6 01        ldA	#1
    9182 55 40        ldHX	*__r0
    9184 F7           stA	0,X
    9185 95           tSX	
(0047) 	}  	
    9186 F6           ldA	0,X
    9187 A7 03        aiS	#3
    9189 81           rts	
_SCIReN:
  fp                   --> X+0
  m                    --> X+1
  ch                   --> X+6
  n                    --> X+5
    918A A7 FD        aiS	#-3
    918C 95           tSX	
(0048) 	return i;             //返回接收到的数据
(0049) }
(0050) 
(0051) unsigned char SCIReN(unsigned char n, unsigned char ch[])
(0052) {
    918D 6F 02        clr	2,X
    918F 6F 01        clr	1,X
    9191 20 31        bra	0x91C4
(0053) 	int m;                  
(0054) 	unsigned char fp;
(0055) 	m = 0;
(0056) 	while (m < n)
(0057) 	{ 	          
    9193 89           pshX	
    9194 8B           pshH	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -