单片机C语言汇编转换,第1张

事实上,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首先需要设置正确啊。。。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 单片机C语言汇编转换

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情