单片机C语言汇编转换
事实上,C语言,最终转换成汇编语言,汇编语言转换成相应的机器语言。
会更容易使用的C语言来编写程序,汇编语言效率接近。
单片机或ARM启动程序,使用汇编写在C语言中的主要程序。高效率的汇编,C语言的可移植性是比较容易实现复杂的结构和算法。
许多嵌入式系统的代码是写在C语言中,如Linux(嵌入式)。虽然在Android上的Java编写的应用程序,但它是系统的代码是用C语言编写。苹果的系统应用程序使用C + +。
还是原来学汇编的时候的程序了
今天整理看到了
送给有用的人
code_seg segment code
data_seg segment data
stack_seg segment idata
spk bit p13
rseg data_seg
frq:ds 1
tmp:ds 1
rseg stack_seg
stack:ds 20
cseg at 00000h
ljmp main
cseg at 0003h
ljmp zd
rseg code_seg
jmp main
PORTA EQU 8FFFH ;8255A口地址
PORTB EQU 9FFFH ;8255B口地址
PORTC EQU 0AFFFH ;8255C口地址
CADDR EQU 0BFFFH ;8255控制字地址
main: MOV A,#88H ;方式0
MOV DPTR,#CADDR
MOVX @DPTR,A
CLR P12
mov r0,#50h ;初始密码首地址
mov r1,#08h
szmm: mov @r0,#00h ;设置密码
inc r0
djnz r1,szmm
mov r2,#03h ;设置输入密码的次数
K:mov ie,#81h ;中断方式设置
mov tcon,#01h
k1:mov a,p1
clr p12 ;判断开关位置
mov r1,a
anl a,#03h
jz dmm
dec a
jz xianshi
dec a
jz xianshi
dec a
jz dmm
dmm: mov r3,#08h ;读密码 八位
mov r6,#80h ;闪动位控制
mov r0,#60h ;读入值的首地址
ll:acall display
acall KSI
jz ll
ACALL DISPLAY
acall KEYI
mov @r0,30h
inc r0
mov a,r6
rr a
mov r6,a
djnz r3,ll
pdmm:mov r1,#50h ;判断密码
mov r0,#60h
mov r3,#08h
cxpd:mov a,@r0
mov r4,a
mov a,@r1
subb a,r4
jnz baojin
inc r0
inc r1
djnz r3,cxpd
mov r0,#0ffh
god: mov r1,#0fh ;密码正确显示good
good: acall display1
djnz r1,good
djnz r0,god
mov a,p1
clr p12 ;判断是否改密码
anl a,#03h
jz gmm
dec a
jz xianshi
dec a
jz xianshi
dec a
jz dmm
jmp k1
baojin: mov ie,#00h ;报警
djnz r2,k3
mov r7,#0ffh
acall sg
jmp k
k3:mov r7,#0fh
acall sg
mov r5,#03h
jmp k
xianshi:mov r0,#0fh ;待机显示
as: mov r6,#00h
acall display
djnz r0, as
jmp k1
gmm:mov r3,#08h ;改密码
mov r6,#80h
mov r0,#50h
lty: acall display
acall KSI
jz lty
acall KEYI
MOV @R0,30H
inc r0
mov a,r6
rr a
mov r6,a
djnz r3,lty
jmp k1
sg:nop ;bao警子程序
ls:mov r6,#0ffh
lm: mov r5,#0ffh
djnz r5,$
cpl p13
djnz r6,lm
djnz r7,ls
mov p1,#0ffh
ret
zd: mov 30h,a ;复位程序
mov a,r6
rl a
mov r6,a
mov a,30h
inc r3
acall d1ms
acall d1ms
acall d1ms
acall d1ms
acall d1ms
acall d1ms
mov tcon,#01h
reti
KEYI: MOV 30h,#00H
MOV R4,#00H
ACALL DISPLAY
ACALL KSI
JNZ LK2
AJMP KEYI
LK2: MOV R1,#04H
MOV R2,#0FEH
MOV R4,#00H
LK4:MOV DPTR,#PORTC
MOV A,R2
MOVX @DPTR,A
NOP
NOP
MOVX A,@DPTR
JB ACC4,LONE
MOV A,#00H
AJMP LKP
LONE:JB ACC5,LTWO
MOV A,#04H
AJMP LKP
LTWO:JB ACC6,LTHR
MOV A,#08H
AJMP LKP
LTHR:JB ACC7,NEXT
MOV A,#0CH
LKP:
ADD A,R4
PUSH ACC
LK3:ACALL DISPLAY
ACALL KSI
JNZ LK3
POP ACC
MOV 30H,A
ret
NEXT:INC R4
MOV A,R2
JNB ACC3,KND
RL A
MOV R2,A
DJNZ R1,LK4
KND:ret
KSI:MOV DPTR,#PORTC
MOV A,#00H
MOVX @DPTR,A
NOP
NOP
MOVX A,@DPTR
CPL A
ANL A,#0F0H
RET
display:mov r5,#02h ;显示
lool:mov r4,#0FFh
dplop: mov a,#0ffh ;取个位数
MOV A,#7fh;查个位数的7段代
MOV DPTR,#PORTA
MOVX @DPTR,A ;送出个位的7段代码
MOV DPTR,#PORTB
MOV A,r6
MOVX @DPTR ,A;开个位显示
acall d1ms ;显示162微秒
djnz r4,dplop ;循环执行250次
djnz r5,lool
mov r5,#02h
poop:mov r4,#0FFh
ppdd: mov a,#07fh ;取个位数
;查个位数的7段代
MOV DPTR,#PORTA
MOVX @DPTR,A ;送出个位的7段代码
MOV DPTR,#PORTB
MOV A,#00h
MOVX @DPTR ,A;开个位显示
acall d1ms ;显示162微秒
MOV DPTR,#PORTB
MOV A,#0FFH
MOVX @DPTR ,A;关闭个位显示,防止鬼影
djnz r4,ppdd ;循环执行250次
djnz r5,poop
ret
display1: mov r5,#08h
mov r4,#7fh
ww:mov a,r5
dec a
mov dptr,#sttab
MOVC A,@A+DPTR ;查个位数的7段代
MOV DPTR,#PORTA
MOVX @DPTR,A ;取个位数
;查个位数的7段代
MOV DPTR,#PORTB
MOV A,r4
MOVX @DPTR ,A;开个位显示
acall d1ms ;显示162微秒
MOV DPTR,#PORTB
MOV A,#0ffH
MOVX @DPTR ,A;关闭个位显示,防止鬼影
mov a,r4
rr a
mov r4,a
djnz r5,ww
ret
;2+2X80=162微秒,延时按12MHZ计算
D1MS: MOV R7,#150
DJNZ R7,$
ret
sttab: db 3dh,5ch,5ch,3fh,40h,40h,40h,40h
end
实验四 跑马灯设计(8255A)
一、 实验目的
掌握可编程并行接口8255A方式0的工作原理及使用方法。 二、 实验仪器与材料
1 TPC-H通用微机接口实验系统1台 2 PC微机1台 3 导线若干 三、 实验内容
1 实验电路如图,8255A的C口接逻辑电平开关K0-K7,A口接LED发光二极管显示
电路L0-L7。
2 实现从8255的C口输入数据,再从A口输出,根据8个发光二极管的发光情况与
开关的状态来验证接口的正确性。
3 试编写程序,实现跑马灯功能。即使相邻两个灯亮,延时一段时间后顺序使下两个
灯亮,循环下去……直到开关K0闭合,程序退出。
四、 实验流程图
1检验接口正确性 2跑马灯
五、 实验电路图
六、 实验程序
1 检查接口是否正确
IO EQU 288H;定义8255地址 CODE SEGMENT ASSUME CS: CODE START:
MOV DX, IO+3
MOV AL, 10001001B; 写控制字 OUT DX, AL
LP: MOV DX, IO+2
IN AL, DX;读开关状态 MOV DX, IO
OUT DX, AL;将开关状态输出到LED JMP LP;返回开始循环 CODE ENDS END START
2 跳马灯
IO EQU 288H N EQU 0FFFFH CODE SEGMENT
ASSUME CS: CODE START:
MOV DX,IO+3 MOV AL,10001001B OUT DX,AL
MOV AL,03H LP:
MOV DX,IO OUT DX,AL ROL AL,1 ROL AL,1 MOV CX,N LP1: NOP
LOOP LP1
MOV CX,N LP2: NOP
LOOP LP2
MOV CX,N LP3: NOP
LOOP LP3
MOV CX,N ;定义8255地址
;定义延时时间 ;DX间址计8255控制口 ;写控制字 ;写循环初值 ;DX间址计8255A口 ;输出循环初值 ;向左移位 ;向左移位 ;延时 ;延时 ;延时 ;延时
LP4: NOP
LOOP LP4
MOV BL,AL ;将AL数据转存到BL
MOV DX,IO+2 ;DX间址计8255C口 IN AL,DX ;读入开关状态 MOV CL,07H ;移位 SAL AL,CL
CMP AL,10000000B ;判断开关是否有动作 JZ EXIT ;K0闭合则退出
MOV AL,BL ;否则将BL数据存入AL JMP LP EXIT:
MOV AH,4CH ;退出程序 INT 21H
CODE ENDS END START
七、 实验现象分析
1 实现了用8 个二极管的发光情况与开关的状态来验证接口的正确性。
2 实现了跑马等功能,在修改程序之前,8个二极管是全亮的,我认为出现这种情况
的原因是,延时太短,导致看不出来灯亮灭的变化。所以我们在程序中多加了几组延时,从而达到了跑马灯的实验效果。
8255A的A口、B口、C口和控制口地址分别为2C0H,2C1H,2C2H和2C3H。
8255A的工作方式控制字为90H。
程序如下:
MOV AL,10010000B
MOV DX,2C3H
OUT DX,AL
DEC DX
DEC DX
DEC DX
IN AL,DX
NOT AL
INC DX
OUT DX,AL
HLT
网上很多教程
以DELL POWEREDAGE 6450为例:
两台6450服务器,一台DELL POWERVANLT 201S磁盘阵列柜。
两台服务器配置:1个9G SCSI 硬盘,1块DELL PERC 2/DC CARD,硬盘接在SCSICARD 上,一块集成的INTEL 8255X-BASED PCI ETHERNET NETWORK CARD ,一块INTELPRO 100 + NETWORK CARD 。
磁盘阵列柜配置:6块16G SCSI 硬盘
两根DELL 心跳网线
一台HUB
一、 配置服务器
1、 将两台服务器A和B连起来。两块INTEL 8255X-BASED PCI ETHERNET用心跳线连接起来,两块INTEL PRO 100 +用两根网线接到HUB上。
2、 两台服务器都打开,在两台服务器A和B上分别安装 WINDOWS 2000 ADVANCEDSERVER。
3、 将服务器A配置为域控制器如取域名为(SERVERCOM)。
4、 配置两块网卡的 IP地址。如INTEL 8255X-BASED PCI ETHERNET设为101110INTEL PRO 100 + 设为11111111110
5、 将服务器B加入到服务器A的域中,其方法有两种:
A 在安装WINDOWS 2000时,计算机会提示是否加入到一个已存在的域中,选择加入,输入服务器A的域 ,选择自定义安装,配置IP地址INTEL 8255X-BASED PCI ETHERNET设为101120,INTEL PRO 100 +设为11111111120,即可加入,这时服务器是不会提示已加入了域中,它会继续安装下去,这一点与NT 40 是不同的。注意:必须确认两台服务器已经连接好了,协议必须配置好。
B 如果在安装时选择不加入一个已存在的域,那么可以在进入WINDOWS 2000后用手工可以加入。具体方法:右击我的电脑,点击属性,选择网络标识,点击属性,输入要加入的域,按照向导,即可完成。
6、 注意:两台服务器的两块同类型网卡必须配置在同一个域中。
7、 重新启动服务器A和B,按 CTRL+M进入DELL PREC 2/DC 中配置PREC CARD
A 将CLUSTER MODE 设置为ENABLE,方法:OBJECTS---ADAPTER--- CLUSTREMODE
B 将PERC 2/DC的 BIOS设置为 DISABLE(实际上选ENABLE)
C 将PERC 2/DC卡的 INITIATOR ID设置为服务器 A为 6,服务器B为7。
D 退出PREC 卡设置,将服务器A和B关闭。
二、 配置POWERVANLT 201S磁盘阵列柜
1、 PV201S有两块ES EM卡,将其拔出,卡上各有一跳线JP8,将JP8短接。
2、 将PV201S用SCSI线与服务器A的PREC 2/DC 相连。进入PREC 2/DC的BIOS配置磁盘阵列柜(PV201S)的RAID(通常RAID5),然后选择INITIALIZE设置。
3、 退出。
注意:此时服务器B是关闭的。
三、 配置CLUSTRE
1、 保持服务器B为关闭状态。
2、 打开服务器A,进入WINDOWS 2000,升级WINDOWS 2000 PERC 2/DC DRIVER,其
步骤如下:
PERC驱动程序必须在两个节点进行升级 下面的过程是描述更新驱动程序的过程:
# 更新PERC驱动程序
1 点击开始菜单 -> 程序 -> 管理工具 -> 计算机管理。
2 在[系统工具]下选择[设备器管理]。
3 在右边的面板中点击SCSI and RAID 控制器
4 右键点击 AMI MEAGRAID或Dell PERC 2/DC RAID控制器, 并且选择[属性]。
5 点击[驱动程序]页,然后点击[更新驱动程序]。
6 在更新驱动程序向导页面中,点击[下一步]。
7 在列表中选择[显示已知设备驱动程序的列表,从中选择特定的驱动程序],然后点击[下一步]。
8 点击[从磁盘安装]。
9 插入包含有新驱动程序的软盘到软盘驱动器中,然后点击[确定]。
10 在左边的面板中选择DELL,然后在右边的面板中选择PERC 2/DC RAID 控制器。
11. 点击[下一步]。
12 如果有驱动程序警告窗体,请点击[是]。
13 点击[下一步]。
14 然后在驱动程序安装完成向导后,点击[完成]。
15 选择[重新启动计算机]后,点击[是]重启计算机。
你老兄把域控制器做出口路由?不是吧。。。还有,你的这个19216801上有提供dns服务吗?如果根本没有dns服务的话,内网机器指向它如果来解析?在它上面能解析是因为这台机器从外网获得了可用的dns服务器地址了。。。如果需要解析内网,你自己的dns首先需要设置正确啊。。。
0条评论