实验5汇编语言程序结构.docx

上传人:b****4 文档编号:4623870 上传时间:2022-12-07 格式:DOCX 页数:12 大小:73.23KB
下载 相关 举报
实验5汇编语言程序结构.docx_第1页
第1页 / 共12页
实验5汇编语言程序结构.docx_第2页
第2页 / 共12页
实验5汇编语言程序结构.docx_第3页
第3页 / 共12页
实验5汇编语言程序结构.docx_第4页
第4页 / 共12页
实验5汇编语言程序结构.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验5汇编语言程序结构.docx

《实验5汇编语言程序结构.docx》由会员分享,可在线阅读,更多相关《实验5汇编语言程序结构.docx(12页珍藏版)》请在冰豆网上搜索。

实验5汇编语言程序结构.docx

实验5汇编语言程序结构

实验5汇编语言程序结构

一、实验目的

1.掌握编写和调试汇编语言程序的方法;

2.掌握模块化汇编语言程序设计方法

3.了解简单电路的控制方法

二、实验任务

1.简单电子表的设计

1)硬件连接

2)延时子程

delay:

PUSHR14

PUSHR15

MOV#4h,R15

ww2:

MOV#0x0FFF,R14;外层循环

ww1:

DECR14;内层循环

JNZww1

DECR15

JNZww2

POPR15

POPR14

RET

3)完整程序

程序框图如下:

程序代码如下:

#include"msp430.h";#definecontrolledincludefile

NAMEmain;modulename

PUBLICmain;makethemainlabelvissible

;outsidethismodule

ORG0FFFEh

DC16init;setresetvectorto'init'label

RSEGCSTACK;pre-declarationofsegment

RSEGCODE;placeprogramin'CODE'segment

init:

MOV#SFE(CSTACK),SP;setupstack

main:

NOP;mainprogram

MOV.W#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdogtimer

MOV.B#0,&P2SEL

MOV.B#0FFH,&P2DIR;P2置为基本/输出端口(控制秒值)

BIC.B#BIT1,&P4SEL

BIS.B#BIT1,&P4DIR;P4置为基本/输出端口(控制蜂鸣器)

BIC.B#BIT0+BIT1,&P5SEL

BIS.B#BIT0+BIT1,&P5DIR;P5置为基本/输出端口(控制分钟值)

again:

BIS.B#BIT1,&P4OUT

MOV.B#0FFH,&P2OUT

BIS.B#BIT0+BIT1,&P5OUT;p2p4p5输出端口初始化

w0:

MOV.B#0FFH,R6

MOV#4,R7;初始化控制分钟输出的R6以及为其计数的R7

w1:

MOV#60,R4

MOV.B#0FFH,R5;初始化控制秒输出的R5以及为其计数的R4

w2:

MOV.BR5,&P2OUT

CALL#delay

DECR5

DECR4

JNZw2;秒循环

DECR6

MOV.BR6,&P5OUT

DECR7

JNZw1;分钟循环

MOV.B#0FFH,&P2OUT

BIC.B#BIT1,P4OUT;满4分钟,蜂鸣器响

CALL#delay

BIS.B#BIT1,P4OUT

JMPagain;重复上述过程

delay:

PUSHR14;延时子程

PUSHR15

MOV#4h,R15

ww2:

MOV#0x0FFF,R14

ww1:

DECR14

JNZww1

DECR15

JNZww2

POPR15

POPR14

RET

END

4)选做:

增加按键控制功能

程序框图如下:

程序代码如下:

#include"msp430.h";#definecontrolledincludefile

NAMEmain;modulename

PUBLICmain;makethemainlabelvissible

;outsidethismodule

ORG0FFFEh

DC16init;setresetvectorto'init'label

RSEGCSTACK;pre-declarationofsegment

RSEGCODE;placeprogramin'CODE'segment

init:

MOV#SFE(CSTACK),SP;setupstack

main:

NOP;mainprogram

MOV.W#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdogtimer

MOV.B#0,&P2SEL

MOV.B#0FFH,&P2DIR;P2置为基本/输出端口(控制秒值)

BIC.B#BIT1,&P4SEL

BIS.B#BIT1,&P4DIR;P4置为基本/输出端口(控制蜂鸣器)

BIC.B#BIT0+BIT1+BIT2,&P1SEL

BIC.B#BIT0+BIT1+BIT2,&P1DIR;P1的三个引脚置为基本/输入端口(控制按键)

BIC.B#BIT0+BIT1,&P5SEL

BIS.B#BIT0+BIT1,&P5DIR;P5置为基本/输出端口(控制分钟值)

again:

BIS.B#BIT1,&P4OUT

MOV.B#0FFH,&P2OUT

BIS.B#BIT0+BIT1,&P5OUT;p2p4p5输出端口初始化

w0:

MOV.B#0FFH,R6

MOV#4,R7;初始化控制分钟输出的R6以及为其计数的R7

w1:

MOV#60,R4

MOV.B#0FFH,R5;初始化控制秒输出的R5以及为其计数的R4

w2:

MOV.BR5,&P2OUT

CALL#delay

DECR5

CALL#test;调用检测按键子程,检测按键是否按下

DECR4

JNZw2;秒循环

DECR6

MOV.BR6,&P5OUT

DECR7

JNZw1;分钟循环

MOV.B#0FFH,&P2OUT

BIC.B#BIT1,P4OUT;满4分钟,蜂鸣器响

CALL#delay

BIS.B#BIT1,P4OUT

JMPagain;重复上述过程

delay:

PUSHR14;延时子程

PUSHR15

MOV#4h,R15

ww2:

MOV#0x0FFF,R14

ww1:

DECR14

JNZww1

DECR15

JNZww2

POPR15

POPR14

RET

test:

PUSHSR;检测按键子程

k2:

BIT.B#BIT0,&P1IN;检测K2(清零)是否按下

JNZk4;否,跳转检测K4(暂停)是否按下

MOV.B#0FFH,&P2OUT;是,秒清零

BIS.B#BIT0+BIT1,&P5OUT;分钟清零

MOV.B#0FFH,R6

MOV#4,R7

MOV#60,R4

MOV.B#0FFH,R5;;重置R6R7R4R5

JMPk3;跳转去检测K3(开始)是否按下

k3:

BIT.B#BIT1,&P1IN;开始是否按下?

JNZk3;否,继续检测

kk3:

BIT.B#BIT0,&P1IN;检测K2(清零)是否按下

JZk2;是,去K2执行清零操作

BIT.B#BIT1,&P1IN;否,检测K3(继续)是否按下

JNZkk3;否,继续检测是否清零

k4:

BIT.B#BIT2,&P1IN;检测K4(暂停)是否按下

JZkk3;是,检测K3(继续)是否按下

POPSR;否,结束检测

RET

END

2.数码管的显示控制

1)数码管按顺序显示0~9和A、b、C、d、E、F

程序框图如下:

程序代码如下:

#include"msp430.h";#definecontrolledincludefile

NAMEmain;modulename

PUBLICmain;makethemainlabelvissible

;outsidethismodule

ORG0FFFEh

DC16init;setresetvectorto'init'label

RSEGDATA16_C

LEDdata:

DB0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07

DB0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71

RSEGCSTACK;pre-declarationofsegment

RSEGCODE;placeprogramin'CODE'segment

init:

MOV#SFE(CSTACK),SP;setupstack

main:

NOP;mainprogram

MOV.W#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdogtimer

MOV.B#0,&P6SEL

MOV.B#0FFH,&P6DIR

MOV.B#0H,&P6OUT;设置P6端口为基本/输出端口并初始化

MOV#LEDdata,R7;R7记录常量数据段首地址

BIS.B#BIT1,&P6OUT;P6.1输出端口置为1

back:

MOV.B#16,R6;计数变量,为数据段数据总个数

again:

MOV.B0(R7),R4;取出R7指向的数据给R4

MOV.B#8,R5;记录一个数据的总位数

w0:

RLA.BR4;将R4中数据最高位左移到进位C

JNCw1;若最高位为0(没有进位),转到w1

BIS.B#BIT4,&P6OUT;若最高位为1,置P6.4OUT为1

JMPw2;转到w2P6.2OUT输出脉冲

w1:

BIC.B#BIT4,&P6OUT;最高位为0,置P6.4OUT为0

w2:

BIS.B#BIT2,&P6OUT

BIC.B#BIT2,&P6OUT;P6.2OUT输出一个脉冲

DECR5

JNZw0;重复输出,直到8位数全部输出完毕

BIS.B#BIT3,&P6OUT

BIC.B#BIT3,&P6OUT;P6.3输出脉冲,数码管去显示

CALL#delay

INCR7

DECR6

JNZagain;重复以上过程

MOV#LEDdata,R7;初始化R7

JMPback;重复整个过程

delay:

PUSHR14;延时子程

PUSHR15

MOV#4h,R15

ww2:

MOV#0xFFFF,R14

ww1:

DECR14

JNZww1

DECR15

JNZww2

POPR15

POPR14

RET

END

2)(选做)编程实现按下KEY8~KEY1键时,数码管显示8~1的数字。

程序框图如下:

(其中显示部分与1)相同)

程序代码如下:

#include"msp430.h";#definecontrolledincludefile

NAMEmain;modulename

PUBLICmain;makethemainlabelvissible

;outsidethismodule

ORG0FFFEh

DC16init;setresetvectorto'init'label

RSEGDATA16_C

LEDdata:

DB0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F

RSEGCSTACK;pre-declarationofsegment

RSEGCODE;placeprogramin'CODE'segment

init:

MOV#SFE(CSTACK),SP;setupstack

main:

NOP;mainprogram

MOV.W#WDTPW+WDTHOLD,&WDTCTL;Stopwatchdogtimer

MOV.B#0,P6SEL

MOV.B#0FFH,&P6DIR

MOV.B#0H,&P6OUT

MOV#LEDdata,R7

BIS.B#BIT1,&P6OUT

MOV.B#0,&P1SEL

MOV.B#0,&P1DIR

k1:

BIT.B#BIT0,&P1IN;是否按下K1

JNZk2;否,去检测K2

MOV#LEDdata+0,R7;是,去相应数据给R7

JMPdisplay;去显示R7内容

k2:

BIT.B#BIT1,&P1IN

JNZk3

MOV#LEDdata+1,R7

JMPdisplay

k3:

BIT.B#BIT2,&P1IN

JNZk4

MOV#LEDdata+2,R7

JMPdisplay

k4:

BIT.B#BIT3,&P1IN

JNZk5

MOV#LEDdata+3,R7

JMPdisplay

k5:

BIT.B#BIT4,&P1IN

JNZk6

MOV#LEDdata+4,R7

JMPdisplay

k6:

BIT.B#BIT5,&P1IN

JNZk7

MOV#LEDdata+5,R7

JMPdisplay

k7:

BIT.B#BIT6,&P1IN

JNZk8

MOV#LEDdata+6,R7

JMPdisplay

k8:

BIT.B#BIT7,&P1IN

JNZk1

MOV#LEDdata+7,R7

JMPdisplay

display:

;显示子程,内容与上一程序雷同,不在赘述

MOV.B0(R7),R4

MOV.B#8,R5

w0:

RLA.BR4

JNCw1

BIS.B#BIT4,&P6OUT

JMPw2

w1:

BIC.B#BIT4,&P6OUT

w2:

BIS.B#BIT2,&P6OUT

BIC.B#BIT2,&P6OUT

DECR5

JNZw0

BIS.B#BIT3,&P6OUT

BIC.B#BIT3,&P6OUT

JMPk1

END

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1