求 四个西安高压开关厂通过P1口高八位控制低八位的led 的 单片机c程序

只需一步,快速开始
后使用快捷导航没有帐号?
查看: 1287|回复: 5
51单片机MOV P1,55h 结果P1口上8个灯全亮
& 尚未签到
马上注册加入鱼C,享用更多服务吧^_^
才可以下载或查看,没有帐号?
本帖最后由 春卷の爱 于
20:53 编辑
设置P1=AAh (B),接在P1口上的8个灯,亮 灭 亮 灭 亮 灭 亮 灭
生成的机器码:85 AA 90
设置P1=55h (B),应该是 灭 亮 灭 亮 灭 亮 灭 亮, 结果8个灯全亮。。。请问这是为什么?
生成的机器码:85 55 90
还有一个很奇怪的问题,编译生成的HEX文件,用UE打开看到的和用ISP下载工具看到的完全不一样,UE打开后好像多了很多代码,也找不到85 55 90这样的代码了
捕获.PNG (16.32 KB, 下载次数: 0)
20:53 上传
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
& 尚未签到
没人知道吗?
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
& 累计签到:550 天连续签到:1 天
话说你是用C编写的,还是汇编编写的,我都是用C编写的,对P1口赋值是0xaa,51单片机应该是低电平点亮led灯吧,没关注过hex文件里的东西
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
& 尚未签到
惜今怀远 发表于
话说你是用C编写的,还是汇编编写的,我都是用C编写的,对P1口赋值是0xaa,51单片机应该是低电平点亮led灯吧 ...
我是用汇编编写的,就一条指令: MOV P1 0XAA, 生成3个字节的机器码。所以想不明白错误在哪里。
关于HEX的问题,我找到答案了,HEX不是简单的BIN文件的16进制表示, HEX文件也有文件头,CHECKSUM等自动生成的信息,所以不止3个字节。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
& 尚未签到
我知道问题了, 要改成
mov P1, #0aah
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
& 尚未签到
就为这我弄了半个小时, 查了ATMEL的规格书和INTEL 8051指令集. 写了一堆记录. 哈哈.
mov p1, 55h
机器码:85 55 90
#inlucde &reg52.h&
void main()
& & P1=0x55;
0000:& & 02 08 00 00 ..& &&&
02 08 00:& & LJMP 08 00& & 跳转到地址0800
Opcode: 0x02& & instruction: LJMP code addr& & Bytes: 3& & Flags: none
0800:& & 78 7F E4 F6 D8 FD 75 81 07 02 08 0C 75 90 55 22& &
78 7F:& & mov R0, 7Fh& && && &&&0x78& & mov R0, #data& & 2bytes
E4& & :& & CLR A& && && && && && && & 0xE4& & CLR A& && && && && && & 1byte& && && && && &&&clear register A
F6& & :& & mov @R0, A& && && && &0xF6& & mov @R0, A& && &&&1byte
单片机mov R0, A和mov @R0, A的区别: mov R0, A 是把累加器中的数送给寄存器R0. mov @R0, A 是把累加器中的数, 送给R0内存储的地址单元. 这里是给7Fh地址赋值0
D8 FD:& && && && && && && && && && && &&&0xD8& & DJNZ R0, reladdr& & 2bytes& && &&&decrement and jump if not zero
R0的值-1, 等于7Eh, 判断不为0, 向前跳转3BYTE, 也就是跳过了 D8 FD, 跳过了 F6, 开始从F6执行: 给地址7Eh赋值0. 如此循环.....直到R0的值为1, 给地址01h赋值0&&执行D8 FD时, R0的值-1 等于0, 执行后面的语句 (地址00h的值没有被改变). 经过以上程序, 地址01-7F的值全部为0, 不明觉厉啊
75 81 07:& & mov iram addr, #data& &把07h赋给internal RAM 81h;& &查ATMEL的datasheet, 地址81h就是大名鼎鼎的SP (stack pointer). 难道上面那段代码是为了建立占空间? 为什么不把80h也改成0. 为什么不把00h也改成0
02 08 0C:& &&&ljmp code addr& &&&这句可以不要,因为080C就在下面
75 90 55:& && &&&mov iram addr, #data&&把55h赋给90. 慢着, 8051instruction set关于MOV指令里有一行字:
** Note: In the case of &MOV iram addr,iram addr&, the operand bytes of the instruction are stored in reverse order. That is, the instruction consisting of the bytes 0x85, 0x20, 0x50 means &Move the contents of Internal RAM location 0x20 to Internal RAM location 0x50& whereas the opposite would be generally presumed.
也就是说第一: 我上面那个汇编程序, 想把idata (55h)赋值给p1, 结果编译成了把地址55h里的值赋给90, 鬼知道地址55h里是什么数. 难怪出错. 因为没有查看8051的指令集, 想当然用了mov p1, 55h这样的赋值语句.
第二: 85这个opcode执行顺序是倒过来的, 就是把oprand 1 给oprand 2. 不过这个是机器的小癖好, 编译的时候两个操作数的顺序是倒着写的, 也就是负负为正了. 不需要特别留意.
22:& && && && && & ret
mov p1, #55h
机器码: 75 90 55
心得: 没有汇编, 可以问别人, 发帖子, 程序也可以修改正确, 但我永远都不知道发生了什么.
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的
按钮,否则您的代码可能会被“吃掉”!
小甲鱼强烈推荐 /1
特效不会给你基本工资,但却能让你升职加薪
- - - - - - - - - - - -
有备无患,念念不忘
•••(
Powered by网站已改版,请使用新地址访问:
include 中断程序的编写:在单片机系统的p1口上接有8个LED,LED的阳极接+5V,阴 的引脚 assembly language 汇编语言 254万源代码下载-
&文件名称: include& & [
& & & & &&]
&&所属分类:
&&开发工具: WORD
&&文件大小: 11 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:中断程序的编写:在单片机系统的p1口上接有8个LED,LED的阳极接+5V,阴极接P1口的引脚。当P1口某一口线输出为0时,将LED点亮。在外部中断0输出引脚P3.2引脚上接上上拉电阻并接有一个按钮开关K1。用K1按钮来产生外部中断0的输入信号。定时器程序的编写:在AT89S51单片机的P1口上接有8个LED.下面采用定时器T0的方式一的定时中断方式,使P1口外接的8个LED每0.5秒闪亮一次。C51程序:在AT89S51的P1.0脚接有一只发光二极管,二极管的阴极接P1.0脚,阳极通过限流电阻接+5V,现在让发光二极管每隔800毫秒闪灭,占空比为50 。不使用函数strcat(),用字符指针变量作函数参数编程实现字符串连接函数strcat()的功能,将字符串srcStr连接到字符串dstSTR的尾部。用基本文件操作编写DOS下的TYPE命令,即把文件内容以ASCII码字符方式向标准输出设备输出。-Write interrupt routine: on the SCM system p1 port connected with 8 LED, LED anode connected to+ 5V, the cathode connected to the P1 port pins. When a certain line P1 port output is 0, the LED lights. In the pull-up resistor connected to the external interrupt and then there is a button to switch on the K1 0 output pin P3.2 pin. With K1 button to generate an external interrupt 0 input signal. Write timer programs: On AT89S51 microcontroller P1 port is connected with 8 LED timer below using the timer T0 interrupt the way a way to make the P1 port 8 LED external flash once every 0.5 seconds. C51 Procedure: AT89S51 of P1.0 pin is connected with a light emitting diode is connected to P1.0 cathode and the anode through the current limiting resistor connected to+ 5V, now let the light emitting diode flash off every 800 ms, the duty cycle is 50
. Do not use the function strcat (), with the character pointer variable as a function parameter programming string concatenation function strcat ()
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&include.docx
&输入关键字,在本站254万海量源码库中尽情搜索:09-2109-2109-2109-2109-2109-2109-2109-2109-2109-21最新范文01-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-01【图文】单片机P1口输入输出实验_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
单片机P1口输入输出实验
大小:1.31MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 西安高压开关厂 的文章

 

随机推荐