📄 lpc932.asm
字号:
; LPC932的ISP功能测试
; LPC932是一款高性能、低功耗的小封装微型控制器,具有8K Flash程序空间,可以ISP或IAP,
; 其IAP服务子程序保存在0FF00H--0FFFFH地址中,不与用户程序冲突。
; ISP入口程序在1E00H,所用空间为1E00H--1FFFH,此程序块可被用户擦除,所以使用时要特
; 别小心。ISP功能与P89C51RD2等MCU的ISP类似,主机可以通过发送'U'来确定波特率。
; 进入ISP的相关设置:
; 1. 芯片出厂时,上电复位后即可运行ISP程序,实现ISP功能。(外部复位,内部RC振荡器,W
; DT关,不加密,向量字使能01)
; 2. 写入用户程序后,要进入ISP则要在用户程序中调用ISP_INI子程序,向量字配置字为1EH,
; 状态字为00H,且1E00H后的FLASH不要使用或擦除。然后,上位机通过串口控制进入ISP,
; 即上位机要发送连续9位0,使MCU检测到间隔信号,复位进入ISP服务程序;上位机可通过对
; TXD(PC的输出)输出0信号0.5S,然后恢复为1电平,再自动检测ISP波特率。
; 3. 用户程序根据一个IO口自行进行ISP入口,若用户自行编写的ISP接口程序。
;
; 本程序用来测试LPC932的ISP功能,由串产生一个间隔信号,使其进行ISP状态,再通上串行助手发
; 送'U'来测试是否进入ISP。(可以直接将LPC932的RXD脚接低电平0.5S,使它检测到间隔信号)
; 向量字设置为1EH,状态字设置为00H,外部RC复位,外部11.0592MHz晶振。运行正常用户程序时,
; 板上的LED闪动(P1.6,低电平点亮)。(测试条件:内部RC时采用9600波特率,外部11.0592MHz晶振300)
; LPC932部份寄存器定义
P1M1 DATA 91H
P1M2 DATA 92H
AUXR1 DATA 0A2H ; 辅助功能寄存器
SSTAT DATA 0BAH ; 串口状态寄存器
BRGR1 DATA 0BFH ; 串行口波特率发生器高字节
BRGR0 DATA 0BEH ; 串行口波特率发生器低字节
BRGCON DATA 0BDH ; 波特率发生器控制寄存器
LEDCON BIT P1.6
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: MOV R7,#0
DJNZ R7,$
; 由于上电复位时所用IO口设置为高阻态,所以要进行IO设置
MOV P1M1,#00H
MOV P1M2,#00H
CLR LEDCON
LCALL ISP_INI
; 用户程序,控制LED闪动
MAIN_L1: MOV R7,#20
MAIN_L2: MOV R6,#0
MAIN_L3: MOV R5,#0
DJNZ R5,$
DJNZ R6,MAIN_L3
DJNZ R7,MAIN_L2
CPL LEDCON ; 取反LED控制,使LED点亮/灭掉
AJMP MAIN_L1
; 名称:ISP_INI
; 功能:初始化ISP设置,即设置UART工作模式和波特率发生器,并允许串口间隔检测,
; 使用上位机通过向串口发送间隔信号使MCU进入ISP功能,当然ISP的向量字要
; 设置及服务程序未被擦除。
; 入口参数:无
; 注:本程序是对UART进行设置,并使用串口的波特率发生器,但不打开串口中断。
ISP_INI:
ANL SSTAT,#0FAH ;清除BR位,SSTAT.2
MOV BRGCON,#00H ;关波特率发生器
ORL AUXR1,#40H ;置位EBRR位,当检测到UART间隔信号时即进行复位
MOV SCON,#50H ;设置串口为工作方式1,允许串口接收
MOV BRGR1,#90H ;设置串口波特率:Fosc / ((BRGR1,BRGR0)+16)
MOV BRGR0,#00H
MOV BRGCON,#03H ;打开串口波特率发生器,使用串口波特率发生器
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -