No.100114 作者:Amy 邮件:amy.bai.msn@hotmail.com ID:64437 登陆:5次 文章数:2篇 最后登陆IP:221.219.114.172 最后登陆:2006/12/11 13:38:01 注册:2006/11/30 13:24:13 财富:108 发帖时间:2006/11/30 13:36:07 发贴者IP:221.219.119.191 标题:Amy:毕业论文汇编程序改成C程序 摘要:No.100114毕业论文汇编程序改成C程序 马上要毕业了,老师要求很严呀!我天生对程序不感冒,可是我得毕业呀!各位能帮帮我把下面的程序写成C的吗?谢谢哥哥姐姐们了! 程序 CSX EQU P2.0 SI EQU P2.1 SCK EQU P2.2 SO EQU P2.3 SUBF EQU 20H ;定义缓冲单元 OV EQU 21H ;设立溢出标志 F0 EQU 22H ;设立判断标志 ORG 0000H SJMP START ORG 0003H ;中断0入口地址 LJMP INT0 ORG 000B ; 中断1入口地址 LJMP INT1 RETI ORG 0060H START: MOV SP #61H ;栈指针=61H, 61H~7FH CLR A CLR B MOV R0,#5FH NEXT0:MOV @R0,A ;清01H~5FH单元 DJNZ R0,NEXT0 MOV TMOD,#0DH MOV TL0,A MOV TH0,A ;定时器清零 MOV DPTR,#77F8H ;P2.7=0且指向0通道 MOV R7,#2 ;置通道数 ORG 1800H XWRSR: MOV A,#1 ;X5045写使能 ACALL X5045 CLR P2.1 ;清时钟 RET XWRDI: MOV A,#4 ;禁止写 SJMP XCM X5045: CLR P2.0 ;片选X5045 MOV R6,#8 ;串行8位数据 CZD: CLR P2.1 RLC A MOV P2.3,C ;写入 NOP SETB P2.1 ;置时钟高电平 NOP DJNZ R6, CZD RET XWREN:MOV A,#06H XCM: ACALL X5045 CLR P2.1 SETB P2.0 RET ACALL XWREN ACALL XWRSR MOV A, #0DH ACALL X5045 SETB P2.0 ACALL XBUY XBUY: MOV R5,#0 XBUZ: ACALL XRSDR JNB ACC.0, XBEND DJNZ R5, XBUZ XBEND:RET XRSDR:MOV A,#5 ;读指令 ACALL X5045 ACALL X5IN SETB P2.0 RET X5IN: MOV R6,#8 ;8位数据 IPUT: SETB P2.0 NOP CLR P2.1 MOV C,P2.3 ;读出 RLC A DJNZ R6, IPUT RET CYCX:MOV DPTR, #77F8H ;从IN0开始采样 MOV R0, #30H MOV R7, #2 CY1: MOVX @DPTR, A ;启动ADC0809 MOV A, #5 ;等10个时钟再查询EOC DJNZ ACC,$ JNB P1.6, $ MOVX A, @DPTR ;读ADC0809结果 MOV @R0, A INC DPTR INC R0 DJNZ R7, CY1 MOV B, @R0 RET CLR C MOV R1, 30H MOV A, 31H SUBB A, R1 JNC KBC MOV R3, 31H MOV R5, 30H KBC : MOV R3, 30H MOV R5, 31H LCALL DAVG DAVG :CLR A MOV R6,A MOV R7,A MOV R0,#4 ;N=4 DAV1:LCALL CYCX ;A/D输入值送寄存器B,A中 MOV R1,A ;保存输入值地位 ADD A,R7 ;累加输入值 MOV R7,A MOV A,B ADDC A,R6 MOV R6,A CLR C ;输入值与最小值作比较 MOV A,R3 SUBB A,R1 MOV A,R2 SUBB A,B JNC DAV2 MOV A,R1 ;输入值大于最大值 MOV R3,A MOV R2,B DAV2:CLR C ;输入值与最小值作比较 MOV A,R1 SUBB A,R5 MOV A,B SUBB A,R4 JNC DAV3 MOV A,R1 ;输入值小于最小值 MOV R5,A MOV R4,B DAV3:DJNZ R0,DAV1 CLR C MOV A,R7 ;累加和中减去最大值 SUBB A,R3 XCH A,R6 SUBB A,R2 XCH A,R6 ;累加和中减去最小值 SUBB A,R5 XCH A,R6 SUBB A,R4 CLR C ;除以2 RRC A XCH A,R6 RRC A MOV R7,A ;R6R7中为平均值 RET PUSH ACC PUSH PSW INTC: JB P3.3,INTC ;等待/INT1变为低电平 SETB TR1 LOOP1:JNB P3.3, LOOP1 ; 等待/INT1变为高电平 JB P3.3, LOOP2 ; 等待/INT1变为低电平 CLR TR1 MOV A, TL1 MOV R3, A ;被乘数低八位存放处 MOV A, TH1 MOV R2, A ;被乘数高八位存放处 MOV R6, #00H MOV R7, #03H LCALL MULD MOV R6, #03H MOV R7, #0E8H LCALL DIVD MOV A, R7 MOV DPTR, TAB1 ;查余弦表 MOVC A, @A+DPTR LCALL XSCX MOV A, R7 MOV DPTR, TAB2 ;查正弦表 MOV A, @A+DPTR POP PSW POP ACC RETI BCCX:CJNE A, #95,LOOP1 ;A>0.95转 CJNE A, #85,LOOP ;A>0.85转 LCALL XSCX LCALL XS2 SETB P1.0 SETB P1.1 SETB P1.2 SETB P1.3 SETB P1.4 SETB P1.5 AJMP BCCX LOOP1:CJNE A, #98, LOOP3 ;A>0.98转 LCALL XSCX LCALL XS1 AJMP BCCX LOOP2:LCALL XSCX LCALL XS2 SETB P1.3 SETB P1.4 SETB P1.5 CJNE A, #95,LOOP3 ;A <0.95转 LCALL XSCX LCALL XS1 AJMP BCCX LOOP4: LCALL XSCX LCALL XS2 SETB P1.0 SETB P1.1 SETB P1.2 AJMP BCCX LOOP3:LCALL XSCX LCALL XS3 CLR P1.3 CLR P1.4 CLR P1.5 CJNE A, #98,LOOP5 ;A≥0.98转 AJMP BCCX LOOP5:LCALL XSCX LCALL XS3 CLR P1.0 CLR P1.1 CLR P1.2 RET PUSH PSW PUSH ACC INTX: JNB P3.2,INTX XSCX: MOV SCON, #00H MOV R3, #00H MOV A, R3 MOV DPTR, #TAB MOV A, @A+DPTR MOV SBUF, A LCALL DELAY MOV A, R6 MOVC A, @A+DPTR MOV SBUF, A LCALL DELAY MOV A, R7 MOVC A, @A+DPTR MOV SBUF, A LCALL DELAY L4: JNB TI, L4 CLR TI POP PSW POP ACC RETI TAB: DB 0C0H 0F9H 0A4H 0B0H DB 99H 92H 82H 0F8H 90H DELAY:MOV R6,#10H L5: MOV R7,#38H L6:DJNZ R7,L6 DJNZ R6,L5 RET XS1:MOV A, #02H MOV SBUF, A RET XS2:MOV A, #09H MOV SBUF, A RET XS3:MOV A, #04H MOV SBUF, A RET MULD功能:双字节二进制无符号数乘法 ;入口条件:被乘数在R2、R3中,乘数在R6、R7中。 ;出口信息:乘积在R2、R3、R4、R5中。 ;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节 计算原理如下: [R2] [R3] ......
>>返回讨论的主题
|