找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6463|回复: 7
打印 上一主题 下一主题
收起左侧

汇编程序问题?

[复制链接]
跳转到指定楼层
楼主
ID:12622 发表于 2009-5-11 13:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谁能帮我改下这个程序,由于敲程序在word里,所以很多都是语法错误,希望大家能帮我改一下,在keil 理编译的  楼下的是我的程序
[此贴子已经被作者于2009-5-11 13:15:04编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:12622 发表于 2009-5-11 13:14 | 只看该作者
  1. [br]1 ORG 0000H [br]2 SCL BIT P1.0;定义24C02的串行时钟线 [br]3 SDA BIT P1.1;定义24C02的串行数据线 [br]4 LJMP START [br]5 START:LCALL STAR;调用 [br]6 MOV R2,#08H;一个数据有8位 [br]7 MOV DPTR,#0600H ;定义源数据的位置 [br]8 LOOP:MOV A,#00H [br]9 MOVC A,@A+DPTR [br]10 LCALL SDATA [br]11 LCALL ACK [br]12 JC LOOP [br]13 INC DPTR [br]14 DJNZ R2,LOOP [br]15 LCALL STOP;调用停止子程序 [br]16 STAR:SETB SDA [br]17 SETB SCL [br]18 NOP [br]19 NOP [br]20 NOP [br]21 NOP [br]22 CLR SDA [br]23 NOP [br]24 NOP [br]25 NOP [br]26 CLR SCL [br]27 RET [br]28 SDATA:MOV R0,#10H [br]29 LOOP0:RLC A [br]30 MOV SDA,C [br]31 NOP [br]32 NOP [br]33 SETB SCL [br]34 NOP [br]35 NOP [br]36 NOP [br]37 NOP [br]38 CLR SCL [br]39 DJNZ R0,LOOP0 [br]40 RET [br]41 ACK:SETB SDA [br]42 NOP [br]43 NOP [br]44 SETB SCL [br]45 NOP [br]46 NOP [br]47 NOP [br]48 NOP [br]49 MOV C,SDA [br]50 CLR SCL [br]51 RET [br]52 STOP:CLR SDA [br]53 NOP [br]54 NOP [br]55 NOP [br]56 NOP [br]57 SETB SCL [br]58 NOP [br]59 NOP [br]60 NOP [br]61 NOP [br]62 SETB SDA [br]63 NOP [br]64 NOP [br]65 NOP [br]66 NOP [br]67 RET [br]68 MAIN1:ORG 0060H [br]69 MOV R3,#0A0H;(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000) [br]70 MOV R4,#00H;置片内字节地址 [br]71 MOV R1,#71H;置欲写数据存放地址指针 [br]72 MOV R7,#01H;置连续写字节数n [br]73 EEPR:MOV P1,#0FFH [br]74 CLR P1.0;发开始信号 [br]75 MOV A,R3;送器件地址 [br]76 ACALL SUBS;调发送单字节子程序 [br]77 MOV A,R4;送片内字节地址 [br]78 ACALL SUBS [br]79 MOV P1,#0FFH [br]80 CLR P1.0;再发开始信号 [br]81 MOV A,R3 [br]82 SETB ACC.0;发读命令 [br]83 ACALL SUBS [br]84 MORE:ACALL SUBR [br]85 MOV @R1,A [br]86 INC R1 [br]87 DJNZ R7,MORE [br]88 CLR P1.0 [br]89 ACALL DELAY [br]90 SETB P1.1 [br]91 ACALL DELAY [br]92 SETB P1.0;送停止信号 [br]93 RET [br]94 SUBR:MOV R0,#08H;接受单字节子程序 [br]95 LOOP2:SETB P1.1 [br]96 ACALL DELAY [br]97 MOV C,P1.0          [br]98 RLC A [br]99 CLR P1.1 [br]100 ACALL DELAY [br]101 DJNZ R0,LOOP2 [br]102 CJNE R7,#01H,LOW [br]103 SETB P1.0;若是最后一个字节置A=1 [br]104 AJMP SETOK [br]105 LOW:CLR P1.0;否则置A=0 [br]106 SETOK:ACALL DELAY [br]107 SETB P1.1 [br]108 ACALL DELAY [br]109 CLR P1.1 [br]110 ACALL DELAY [br]111 SETB P1.0;应答毕,SDA置1 [br]112 RET [br]113 LCALL DA [br]114 DA:MOV A,P0 [br]115 MOV DPTR,#FEFFH [br]116 MOV @DPTR,A [br]117 RET [br]118 MAIN: [br]119 ORG 001BH [br]120 LJMP TINT [br]121 ORG 0030H [br]122 LCALL INIT [br]123 ;初始化子程序: [br]124 INIT:CLR RS0 [br]125 CLR RS1 [br]126 MOV R0,#10H [br]127 MOV R1,#00H [br]128 MOV P1,#0FFH [br]129 CLR TR1 [br]130 MOV TMOD,#19H [br]131 MOV TL1,#19H [br]132 MOV TH1,#0FCH [br]133 SETB TR1 [br]134 SETB ET1 [br]135 SET EA [br]136 RET [br]137 ;定时扫描子程序: [br]138 TIINT:SETB RS0 [br]139 CLR EA [br]140 CLR TR1 [br]141 MOV A,#1EH      [br]142 ADD A,TL1 [br]143 MOV TL1,A [br]144 MOV A,#0FCH [br]145 ADDC A,TH1 [br]146 MOV TH1,A [br]147 SETB TR1 [br]148 SETB EA [br]149 TIINT1:CJNE R1,#08H,TINT2 [br]150 MOV 10H,20H [br]151 MOV 11H,21H [br]152 MOV 12H,22H [br]153 MOV 13H,23H [br]154 MOV 14H,24H [br]155 MOV 15H,25H [br]156 MOV 16H,26H [br]157 MOV 17H,27H [br]158 TIINT2:CJNE R1,#08H,TIINT3 [br]159 MOV A,@R0 [br]160 SJMP TIINT4 [br]161 TIINT3:MOV A,@R0 [br]162 ADD A,#15 [br]163 MOVC A,@A+PC [br]164 TIINT4:LCALL SENDLED [br]165 INC R0 [br]166 INC R1 [br]167 TIINTE:CLR RS0 [br]168 DB 03H,9FH,25H,0DH,99H [br]169 49H,41H,1FH,01H,09H [br]170 ;显示子程序: [br]171 SENDLED:CLR P1.3 [br]172 MOV R2,#8 [br]173 SLED0:RRC A [br]174 JNC SLED1 [br]175 SETB P1.2 [br]176 SJMP SLED2 [br]177 SLED1:CLR P1.2 [br]178 SLED2:CLR P1.1 [br]179 NOP [br]180 SETB P1.1 [br]181 DJNZ R2,SLED0 [br]182 MOV A,R1 [br]183 MOV C,ACC.0 [br]184 MOV P1.6,C [br]185 MOV C,ACC.1 [br]186 MOV P1.5,C [br]187 MOV C,ACC.2 [br]188 MOV P1.4,C [br]189 STTB P1.3 [br]190 RET [br]191 MAIN2:ORG 0030H [br]192 MOV SP,#5FH [br]193 MOV P2,#0FFH [br]194 LOOP: [br]195 ACALL KEY;调用键盘程序 [br]196 JNB F0,LNEXT;如果无键按下,则继续 [br]197 LNEXT: [br]198 AJMP LOOP;反复循环,主程序到此结 [br]199 ACALL KEYPROC;否则调用键盘处理程序 [br]200 DELAY: [br]201 MOV R7,#100 [br]202 D1:MOV R6,#100 [br]203 DJNZ R6,$ [br]204 DJNZ R7,D1 [br]205 RET [br]206 ;-------------------延时程序,键盘处理中调用) [br]207 JB ACC.1,key1;1号键按下转 [br]208 JB ACC.2,key2;2号键按下转 [br]209 JB ACC.3,key3;3号键按转 [br]210 AJMP KEY_RET [br]211 Key1:MOV @R0,P1 [br]212 MOV A,@R0;取当前计时单元数据到A [br]213 DEC R0;指向前一地址 [br]214 SWA A;A中数据高四位与低四位交换 [br]215 ORL A,@R0;前一地址中数据放入A中低位 [br]216 ADD A,#01H;A加1操作 [br]217 DA A;十进制调整 [br]218 MOV R3,A;移入R3寄存器 [br]219 ANL A,#0FH;高四位变0 [br]220 MOV @R0,A;放回前一地址单元 [br]221 MOV A,R3;取回R3中暂存数据 [br]222 INC R0;指向当前地址单元 [br]223 SWAP A;A中数据高四位与低四位交换 [br]224 ANL A,#0FH;高四位变0 [br]225 MOV @R0,A;数据放入当前地址单元中 [br]226 MOV P1,@R1 [br]227 AJMP KEY_RET [br]228 Key2:MOV @R0,P1 [br]229 MOV A,@R0;取当前计时单元数据到A [br]230 DEC R0;指向前一地址 [br]231 SWAP A;A中数据高四位与低四位交换 [br]232 ORL A,@R0;前一地址中数据放入A中低四位 [br]233 DEC A,#01H;A加1操作 [br]234 DA A;十进制调整 [br]235 MOV R3,A;移入R3寄存器 [br]236 ANL A,#0FH;高四位变0 [br]237 MOV @R0,A;放回前一地址单元 [br]238 MOV A,R3;取回R3中暂存数据 [br]239 INC R0;指向当前地址单元 [br]240 SWAP A;A中数据高四位与低四位交换 [br]241 ANL A,#0FH;高四位变0 [br]242 MOV @R0,A;数据放入当前地址单元中 [br]243 MOV P1,@R1 [br]244 AJMP KEY_RET [br]245 Key3:MOV A,71H [br]246 ADD A,#01H [br]247 MOV 71H,A [br]248 LCALL MAIN [br]249 LCALL EEPW [br]250 LCALL AGAIN [br]251 LCALL SUBS [br]252 LCALL LOOP [br]253 LCALL REP [br]254 LCALL DELAY [br]255 AJMP KEY_RET [br]256 KEY_RET:RET [br]257 KEY: [br]258 CLR F0;清F0,表示无键按下。 [br]259 ORL P2,#00111100B;将P2口的接有键的四位置1 [br]260 MOV A,P2;取P2的值 [br]261 ORL A,#11000011B;将其余4位置1 [br]262 CPL A;取反 [br]263 JZ K_RET;如果为0则一定无键按下 [br]264 ACALL DELAY;否则延时去键抖 [br]265 ORL P2,#00111100B [br]266 MOV A,P2 [br]267 ORL A,#11000011B [br]268 CPL A [br]269 JZ K_RET [br]270 MOV B,A;确实有键按下,将键值存入B中 [br]271 SETB F0;设置有键按下的标志 [br]272 K_RET: [br]273 ORL P2,#00111100B;此处循环等待键的释放 [br]274 MOV A,P2      [br]275 ORL A,#11000011B [br]276 CPL A [br]277 JZ K_RET1;直到读取的数据取反后为0说明键释放了,才从键盘处理程序中返回AJMP K_RET [br]278 RET [br]279 ;写串行E2PROM子程序EEPW [br]280 ;R3=10100000(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000) [br]281 ;(R4)=片内字节地址 [br]282 ;(R1)=欲写数据存放地址指针 [br]283 ;(R7)=连续写字节数n [br]284 MAIN3:ORG 0060H [br]285 MOV R3,#0A0H;(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000) [br]286 MOV R4,#00H;置片内字节地址 [br]287 MOV R1,#71H;置欲写数据存放地址指针 [br]288 MOV R7,#01H;置连续写字节数n [br]289 EEPW:MOV P1,#0FFH [br]290 CLR P1.0;发开始信号 [br]291 MOV A,R3;送器件地址 [br]292 ACALL SUBS [br]293 MOV A,R4;送片内字节地址 [br]294 ACALL SUBS [br]295 AGAIN:MOV A,@R1 [br]296 ACALL SUBS;调发送单字节子程序INC   R1 [br]297 DJNZ R7,AGAIN;连续写n个字节 [br]298 CLR P1.0;SDA置0, 准备送停止信号 [br]299 ACALL DELAY;延时以满足传输速率要求 [br]300 SETB P1.1;发停止信号 [br]301 ACALL DELAY [br]302 SETB P1.0 [br]303 RET [br]304 SUBS:MOV R0,#08H;发送单字节子程序 [br]305 LOOP:CLR P1.1 [br]306 RLC A [br]307 MOV P1.0,C [br]308 NOP [br]309 SETB P1.1 [br]310 ACALL DELAY [br]311 DJNZ R0,LOOP;循环8次送8个bit [br]312 CLR P1.1 [br]313 ACALL DELAY [br]314 SETB P1.1 [br]315 REP:MOV C,P1.0 [br]316 JC REP;判应答到否,未到则等待 [br]317 CLR P1.1 [br]318 RET [br]319 DELAY:NOP [br]320 NOP [br]321 RET [br]322 MAIN4:LCALL ST [br]323 LCALL STRT [br]324 LCALL LOOP;调用子程序 [br]325 LCALL STAR;同上 [br]326 LCALL SDATA;同上 [br]327 LCALL ASK;同上 [br]328 LCALL STOP;同上 [br]329 ST:MOV A,P0 [br]330 MOV R0,#10H [br]331 MOV R1,#0600H [br]332 MOV @R1,A [br]333 INC R1 [br]334 DJNZ R0 ST [br]335 RET [br]336 END
复制代码
回复

使用道具 举报

板凳
ID:14383 发表于 2009-7-6 19:14 | 只看该作者
真长 声援一下
回复

使用道具 举报

地板
ID:14095 发表于 2009-7-7 21:11 | 只看该作者
好长
回复

使用道具 举报

5#
ID:24677 发表于 2010-6-23 22:27 | 只看该作者
愿神保佑你,阿门
回复

使用道具 举报

6#
ID:24818 发表于 2010-6-30 22:29 | 只看该作者

好长,放在这里很难看懂。。。

我也声援一下好了。。。

回复

使用道具 举报

7#
ID:25058 发表于 2010-7-31 20:52 | 只看该作者

看不懂,纯顶!

回复

使用道具 举报

8#
ID:27770 发表于 2011-1-14 02:43 | 只看该作者

你这个纯粹是一个 24C 读写而已吧?

你使用哪一种 51 芯片?

如果是 STC,MPC 等新品种,就不用使用 24C 了!内部有 EEROM 可以使用啊!

建议使用 STC ,还省下一个 24C 呢!

你给出一个 LST 文件,而且弄成斜体字,要这些无用花样有什么用?-------不好阅读,原来的文件呢?

希望帮助你,但是你要尽量简略一些.

期待下一次再来看看.

 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表