历史上的今天
今天是:2026年01月13日(星期二)
2023年01月13日 | 用汇编语言写个流水灯程序
2023-01-13 来源:zhihu
;************* 功能说明 **************
;程序使用P4.7 P4.6 P1.6 P1.7 来演示流水灯,输出低驱动。
Fosc_KHZ EQU 22118 ;22118KHZ
STACK_POIRTER EQU 0D0H ;堆栈开始地质
;*******************************************************
P4 DATA 0C0H
P0M1 DATA 0x93 ;
P0M0 DATA 0x94 ;
P1M1 DATA 0x91 ;
P1M0 DATA 0x92 ;
P2M1 DATA 0x95 ;
P2M0 DATA 0x96 ;
P3M1 DATA 0xB1 ;
P3M0 DATA 0xB2 ;
P4M1 DATA 0xB3 ;
P4M0 DATA 0xB4 ;
P5M1 DATA 0xC9 ;
P5M0 DATA 0xCA ;
P6M1 DATA 0xCB ;
P6M0 DATA 0xCC ;
P7M1 DATA 0xE1 ;
P7M0 DATA 0xE2 ;
ORG 0000H ;reset
LJMP F_Main
ORG 0003H ;0 INT0 interrupt
RETI
LJMP F_INT0_Interrupt
ORG 000BH ;1 Timer0 interrupt
LJMP F_Timer0_Interrupt
ORG 0013H ;2 INT1 interrupt
LJMP F_INT1_Interrupt
ORG 001BH ;3 Timer1 interrupt
LJMP F_Timer1_Interrupt
ORG 0023H ;4 UART1 interrupt
LJMP F_UART1_Interrupt
ORG 002BH ;5 ADC and SPI interrupt
LJMP F_ADC_Interrupt
ORG 0033H ;6 Low Voltage Detect interrupt
LJMP F_LVD_Interrupt
ORG 003BH ;7 PCA interrupt
LJMP F_PCA_Interrupt
ORG 0043H ;8 UART2 interrupt
LJMP F_UART2_Interrupt
ORG 004BH ;9 SPI interrupt
LJMP F_SPI_Interrupt
ORG 0053H ;10 INT2 interrupt
LJMP F_INT2_Interrupt
ORG 005BH ;11 INT3 interrupt
LJMP F_INT3_Interrupt
ORG 0063H ;12 Timer2 interrupt
LJMP F_Timer2_Interrupt
ORG 0083H ;16 INT4 interrupt
LJMP F_INT4_Interrupt
;******************** 主程序 **************************/
ORG 0100H ;reset
F_Main:
CLR A
MOV P0M1, A ;设置为准双向口
MOV P0M0, A
MOV P1M1, A ;设置为准双向口
MOV P1M0, A
MOV P2M1, A ;设置为准双向口
MOV P2M0, A
MOV P3M1, A ;设置为准双向口
MOV P3M0, A
MOV P4M1, A ;设置为准双向口
MOV P4M0, A
MOV P5M1, A ;设置为准双向口
MOV P5M0, A
MOV P6M1, A ;设置为准双向口
MOV P6M0, A
MOV P7M1, A ;设置为准双向口
MOV P7M0, A
MOV SP, #STACK_POIRTER
MOV PSW, #0 ;选择第0组R0~R7
L_MainLoop:
CLR P1.7
MOV A, #250
LCALL F_delay_ms ;延时250ms
LCALL F_delay_ms ;延时250ms
SETB P1.7
CLR P1.6
MOV A, #250
LCALL F_delay_ms ;延时250ms
LCALL F_delay_ms ;延时250ms
SETB P1.6
CLR P4.7
MOV A, #250
LCALL F_delay_ms ;延时250ms
LCALL F_delay_ms ;延时250ms
SETB P4.7
CLR P4.6
MOV A, #250
LCALL F_delay_ms ;延时250ms
LCALL F_delay_ms ;延时250ms
SETB P4.6
SJMP L_MainLoop
F_delay_ms:
PUSH 02H ;入栈R2
PUSH 03H ;入栈R3
PUSH 04H ;入栈R4
MOV R2,A
L_delay_ms_1:
MOV R3, #HIGH (Fosc_KHZ / 13)
MOV R4, #LOW (Fosc_KHZ / 13)
L_delay_ms_2:
MOV A, R4 ;1T Total 13T/loop
DEC R4 ;2T
JNZ L_delay_ms_3 ;4T
DEC R3
L_delay_ms_3:
DEC A ;1T
ORL A, R3 ;1T
JNZ L_delay_ms_2 ;4T
DJNZ R2, L_delay_ms_1
POP 04H ;出栈R2
POP 03H ;出栈R3
POP 02H ;出栈R4
RET
;**************** 中断函数 *****
F_Timer0_Interrupt: ;Timer0 1ms中断函数
RETI
F_Timer1_Interrupt:
RETI
F_Timer2_Interrupt:
RETI
F_INT0_Interrupt:
RETI
F_INT1_Interrupt:
RETI
F_INT2_Interrupt:
RETI
F_INT3_Interrupt:
RETI
F_INT4_Interrupt:
RETI
F_UART1_Interrupt:
RETI
F_UART2_Interrupt:
RETI
F_ADC_Interrupt:
RETI
F_LVD_Interrupt:
RETI
F_PCA_Interrupt:
RETI
F_SPI_Interrupt:
RETI
END
上一篇:用C语言写一个驱动数码管程序
下一篇:用C语言写一个跑马灯程序
史海拾趣
|
如图所示,我每开个文件就打开个新的窗口,就像IE浏览器一样,这样用起来很不方便,如何设置使文件窗口像遨游浏览器等那样显示文件,鼠标一点就切换,而不用每次换个文件就要将窗口最小化再换文件。或者扎样能使quartus回到默认设置,默认设置下就 ...… 查看全部问答> |
|
CPU是S3C2440,64M SDRAM,2M NOR FLASH,64M NAND FLASH。 NOR FLASH启动,可运行简单程序和WIN CE;但NAND FLASH起不来。 有谁遇到过这问题吗?… 查看全部问答> |
|
现有应用程序App1和App2。App1在自身的InitInstance里通过CreateProcess调用App2后进入等待,需检测到App2的主窗口创建完毕后App1才继续运行。 通过EnumWindows可以检测到App2的HWND,然而不知道App2主窗口创建好的具体时机,通过Sleep一段时间后A ...… 查看全部问答> |
|
我的程序是通过并口和外设进行通信的,但是我的外设是使用串口和电脑连接的,硬件上不会有什么改动了,也不能使用并口转串口的硬件转换卡,要做一个软件中间层,把程序发往并口的数据转换至串口,并接受来自串口的数据再发给并口,是要虚拟出一个并 ...… 查看全部问答> |
|
设置WinCE调试应用程序,在ActiveSync连接的时候,出现一个对话框 “未创建任何配置文件。要创建新配置文件,请使用‘控制面板’中的‘右键’图标。”我点了确定之后,又出现一个 “由于无法访问您的个人信息管理器(pim)程序而无法完成同步。请确认您的PIM程序正在运行并再次同步。如果您的PIM程序正在运行,请 ...… 查看全部问答> |
|
clk: 系统时钟;rst:复位信号 clk1us: 对交流信号采样的时钟; pulse: 交流信号过零方波 data: 正弦输入数据 rms_div:在一个周期按采样间隔取样数据所求的和 rms_by:在一个周期按采样间隔累加数据和值 交流信号的RMS=(rms_div/rms_by ...… 查看全部问答> |
|
小弟设计了一个模拟串口的发送接收程序,调试的时候第一个数据是错误的 利用的单片机资源:P1_0用来接收PC机下发的数据(一个起始位,八个数据位,一个结束位),P1_1用来发送数据,外部中断0,定时器1(用来接收数据),定时器中断0(用来发送数据)。波特率9600bps 实现的功能:单片机能正确返回PC机下发的数据。 现 ...… 查看全部问答> |




