📄 字节位颠倒程序.txt
字号:
C51编程:看到以前的帖子:字节位颠倒程序的讨论,haotz提供的思路很好,简单高效,但直接用CY却造成程序结果的错误,可细查。 [润宇] [27次] 01-9-27 20:50:57
修改后的程序:
#include <reg52.h>
#define uchar unsigned char
bdata unsigned char b1,b2;
sbit b10=b1^0;
sbit b11=b1^1;
sbit b12=b1^2;
sbit b13=b1^3;
sbit b14=b1^4;
sbit b15=b1^5;
sbit b16=b1^6;
sbit b17=b1^7;
sbit b20=b2^0;
sbit b21=b2^1;
sbit b22=b2^2;
sbit b23=b2^3;
sbit b24=b2^4;
sbit b25=b2^5;
sbit b26=b2^6;
sbit b27=b2^7;
unsigned char un_down_rev(unsigned char ch);
unsigned char un_down_rev(unsigned char ch)
{
b1=ch;
b27=b10;
b26=b11;
b25=b12;
b24=b13;
b23=b14;
b22=b15;
b21=b16;
b20=b17;
return b2;
}
void main()
{
unsigned char i;
i=un_down_rev(0x0f);
}
haotz的.lst文件:
C51 COMPILER V6.10
TEST
03/24/2001 22:28:18 PAGE 1
C51 COMPILER V6.10, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN .\test.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\test.c DEBUG OBJECTEXTEND
CODE
stmt level source
1
2 #include"at89x52.h"
3 bdata unsigned char b;
4 sbit b0=b^0;
5 sbit b1=b^1;
6 sbit b2=b^2;
7 sbit b3=b^3;
8 sbit b4=b^4;
9 sbit b5=b^5;
10 sbit b6=b^6;
11 sbit b7=b^7;
12 //bit tmp;
13 unsigned char un_down_rev(unsigned char ch);
14 unsigned char un_down_rev(unsigned char ch)
15 {
16 1 b=ch;
17 1
18 1 CY=b0;
19 1 b0=b7;
20 1 b7=CY;
21 1
22 1 CY=b1;
23 1 b1=b6;
24 1 b6=CY;
25 1
26 1
27 1 CY=b2;
28 1 b2=b5;
29 1 b5=CY;
30 1
31 1 CY=b3;
32 1 b3=b4;
33 1 b4=CY;
34 1 return b;
35 1 }
36 void main(void)
37 {
38 1 unsigned char i;
39 1
40 1 i=un_down_rev(0x0f);
41 1 }
C51 COMPILER V6.10
TEST
03/24/2001 22:28:18 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _un_down_rev (BEGIN)
;---- Variable 'ch' assigned to Register 'R7' ----
; SOURCE LINE # 14
; SOURCE LINE # 15
; SOURCE LINE # 16
0000 8F00 R MOV b,R7
; SOURCE LINE # 18
0002 A200 R MOV C,b0
; SOURCE LINE # 19
0004 A200 R MOV C,b7
0006 9200 R MOV b0,C
; SOURCE LINE # 20
0008 9200 R MOV b7,C
; SOURCE LINE # 22
000A A200 R MOV C,b1
; SOURCE LINE # 23
000C A200 R MOV C,b6
000E 9200 R MOV b1,C
; SOURCE LINE # 24
0010 9200 R MOV b6,C
; SOURCE LINE # 27
0012 A200 R MOV C,b2
; SOURCE LINE # 28
0014 A200 R MOV C,b5
0016 9200 R MOV b2,C
; SOURCE LINE # 29
0018 9200 R MOV b5,C
; SOURCE LINE # 31
001A A200 R MOV C,b3
; SOURCE LINE # 32
001C A200 R MOV C,b4
001E 9200 R MOV b3,C
; SOURCE LINE # 33
0020 9200 R MOV b4,C
; SOURCE LINE # 34
; SOURCE LINE # 35
0022 ?C0001:
0022 22 RET
; FUNCTION _un_down_rev (END)
; FUNCTION main (BEGIN)
; SOURCE LINE # 36
; SOURCE LINE # 37
; SOURCE LINE # 40
0000 7F0F MOV R7,#0FH
0002 120000 R LCALL _un_down_rev
0005 8F00 R MOV i,R7
; SOURCE LINE # 41
0007 22 RET
; FUNCTION main (END)
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 43 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 1
C51 COMPILER V6.10
TEST
03/24/2001 22:28:18 PAGE 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
呵呵,多谢夸奖,真的有错误!!,自己该一下吧! [haotz] [3次] 01-9-28 下午 01:07:13
大家多多交流哟。 [润宇] [0次] 01-9-28 下午 10:49:43
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -