我今年52岁学了十天单片机,有个问题请各位老师指教谢了.
各位老师好:硬件学完了,问题不大.软件也学完了(好几个通宵呢)遇到麻凡了.各个部分学完了(主程序.子程序.寄存器定意.I/O口设值.AD设值.时钟设值.)我要想编个程序试试了,可脑子乱了这么多程序部分哪个在前哪个在后分不清了.是主程序在前还是各种定意在前应该是先运行主程序,我又觉着不对不定意主程序砸运行一头雾水,请指教谢了.
全部回复(103)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
@zbdxdxkj
各位老师好:我想了好久终于知到这个问题怎样问了, 寄存器定意.I/O口.模数转换命令是不是应该写在ROM中是在ORG(主程序之前吗?请指教谢了.
是的,另外,已经预定义过的就不必再次定义.
比如:
$mod51 ;或者#include等,以编译器不同而不同
Counter data 35H
Flagreg data 20H
……
MyBit0 bit 00H
MyBit1 bit Flagreg.1 ;即01H位
……
MyConst equ 126
……
org 0H
jmp Start
org 03H
jmp IntX0
……
比如:
$mod51 ;或者#include
Counter data 35H
Flagreg data 20H
……
MyBit0 bit 00H
MyBit1 bit Flagreg.1 ;即01H位
……
MyConst equ 126
……
org 0H
jmp Start
org 03H
jmp IntX0
……
0
回复
提示
@sdjufeng
是的,另外,已经预定义过的就不必再次定义.比如:$mod51 ;或者#include等,以编译器不同而不同Counter data 35HFlagreg data 20H……MyBit0 bit 00HMyBit1 bit Flagreg.1 ;即01H位……MyConst equ 126…… org 0H jmp Start org 03H jmp IntX0……
您好:ORG之前的各种设制命令占ROM地址吗?要是占的话(ORG从0000H开始)ORG之前的命令占哪里?(PC指针不是从零开始吗)那些设制怎会操做.我糊涂请指教.学了十几天了想写程序还不行.
0
回复
提示
@zbdxdxkj
各位老师好:我想了好久终于知到这个问题怎样问了, 寄存器定意.I/O口.模数转换命令是不是应该写在ROM中是在ORG(主程序之前吗?请指教谢了.
ORG是指定编译出的程序放在ROM什么位置,可以用在任何地方,所以无所谓用在前后.
程序的第一句如果没有ORG编译时就放在地址0000,所以第一句可以不用“ORG 00”
定义I/O口、外设的指令也可以放在任何位置,但一定要在使用这些I/O口、外设的程序以前.这个以前不是编程序的行数前,而是程序运行先后的前面.但一般放在在主程序一开始,需要的话在程序运行中间也可以改变设置.
汇编语言分“指令”和“伪指令”,指令在编译后都产生目标程序,这些目标程序就被放在ROM中;伪指令不产生目标程序,只是告诉编译程序去怎么运作,比如说ORG就是告诉编译程序下面紧接的程序从ROM什么地址开始,(放在ROM中什么位置).所以目标程序反编译后能看到所有原程序的指令,但原程序中的伪指令反编译后就看不到.
程序的第一句如果没有ORG编译时就放在地址0000,所以第一句可以不用“ORG 00”
定义I/O口、外设的指令也可以放在任何位置,但一定要在使用这些I/O口、外设的程序以前.这个以前不是编程序的行数前,而是程序运行先后的前面.但一般放在在主程序一开始,需要的话在程序运行中间也可以改变设置.
汇编语言分“指令”和“伪指令”,指令在编译后都产生目标程序,这些目标程序就被放在ROM中;伪指令不产生目标程序,只是告诉编译程序去怎么运作,比如说ORG就是告诉编译程序下面紧接的程序从ROM什么地址开始,(放在ROM中什么位置).所以目标程序反编译后能看到所有原程序的指令,但原程序中的伪指令反编译后就看不到.
0
回复
提示
@njyd
ORG是指定编译出的程序放在ROM什么位置,可以用在任何地方,所以无所谓用在前后. 程序的第一句如果没有ORG编译时就放在地址0000,所以第一句可以不用“ORG00” 定义I/O口、外设的指令也可以放在任何位置,但一定要在使用这些I/O口、外设的程序以前.这个以前不是编程序的行数前,而是程序运行先后的前面.但一般放在在主程序一开始,需要的话在程序运行中间也可以改变设置. 汇编语言分“指令”和“伪指令”,指令在编译后都产生目标程序,这些目标程序就被放在ROM中;伪指令不产生目标程序,只是告诉编译程序去怎么运作,比如说ORG就是告诉编译程序下面紧接的程序从ROM什么地址开始,(放在ROM中什么位置).所以目标程序反编译后能看到所有原程序的指令,但原程序中的伪指令反编译后就看不到.
讲的太好了,我明白了很多.谢谢您!我在中断方面还有点问题.中断我知道,可单片机的一个脚我设成输入时(比如说下降沿响应中断)ROM中的程序怎样响应(比如说我想要指定的一输出脚由1变0)响应的是PC指的地址呢还是命令的位呢.我想这方面搞明白了就可是编程了.
0
回复
提示
@zbdxdxkj
讲的太好了,我明白了很多.谢谢您!我在中断方面还有点问题.中断我知道,可单片机的一个脚我设成输入时(比如说下降沿响应中断)ROM中的程序怎样响应(比如说我想要指定的一输出脚由1变0)响应的是PC指的地址呢还是命令的位呢.我想这方面搞明白了就可是编程了.
楼主,
我有个同事,1953年出生的.他是2001年后,才学单片机.湖北人
近几年,他已经很熟悉,MCU开发,例如电饭煲,倒车雷达,温度控制板,棉花湿度仪.....
非常在行,他原来是,技校毕业
我本身,也是32岁才,真正编程.许多人说,30岁后,不宜从事软件编程.
我觉得,不妥.俺,现在连复杂的,小波变换及其应用,DSP常用算法,也得心就手.我已36岁,这几年,才转行到DSP,MCU 编程.
以前,我是画电路板的,PROTEL99,仅仅是硬件工程师
不过,现在算是DSP,MCU 行家
一起努力
我有个同事,1953年出生的.他是2001年后,才学单片机.湖北人
近几年,他已经很熟悉,MCU开发,例如电饭煲,倒车雷达,温度控制板,棉花湿度仪.....
非常在行,他原来是,技校毕业
我本身,也是32岁才,真正编程.许多人说,30岁后,不宜从事软件编程.
我觉得,不妥.俺,现在连复杂的,小波变换及其应用,DSP常用算法,也得心就手.我已36岁,这几年,才转行到DSP,MCU 编程.
以前,我是画电路板的,PROTEL99,仅仅是硬件工程师
不过,现在算是DSP,MCU 行家
一起努力
0
回复
提示
@zbdxdxkj
讲的太好了,我明白了很多.谢谢您!我在中断方面还有点问题.中断我知道,可单片机的一个脚我设成输入时(比如说下降沿响应中断)ROM中的程序怎样响应(比如说我想要指定的一输出脚由1变0)响应的是PC指的地址呢还是命令的位呢.我想这方面搞明白了就可是编程了.
中断是单片机在执行某个进程时,由于内、外某个中断源向单片机发出中断请求信号,要求单片机中断当前进程而转去执行相应的线程,待处理完毕中断线程后,再返回继续执行原来进程.
当设置外部中断的信号来时(在中断引脚发生了下降沿),先由硬件完成中断标志位的变化.在由硬件完成PC指针的入栈,记录被中断进程的的地址.
在由硬件完成PC指针装入中断线程的入口地址.
PC指针装入中断线程入口地址后,单片机开始执行中断线程(指定一个输出脚由1变0).由于中断线程中可能用到被中断进程的资源,所以要先保护原进程的资源状态如 ACC,PSW 等等,当中断线程执行完成后在恢复原进程的资源状态.我的理解就是这样的说的不好也别怪我啦!相互学习啦!
52岁还在学习!这就够我学的啦!向你学习!
当设置外部中断的信号来时(在中断引脚发生了下降沿),先由硬件完成中断标志位的变化.在由硬件完成PC指针的入栈,记录被中断进程的的地址.
在由硬件完成PC指针装入中断线程的入口地址.
PC指针装入中断线程入口地址后,单片机开始执行中断线程(指定一个输出脚由1变0).由于中断线程中可能用到被中断进程的资源,所以要先保护原进程的资源状态如 ACC,PSW 等等,当中断线程执行完成后在恢复原进程的资源状态.我的理解就是这样的说的不好也别怪我啦!相互学习啦!
52岁还在学习!这就够我学的啦!向你学习!
0
回复
提示
@我爱电源网
中断是单片机在执行某个进程时,由于内、外某个中断源向单片机发出中断请求信号,要求单片机中断当前进程而转去执行相应的线程,待处理完毕中断线程后,再返回继续执行原来进程.当设置外部中断的信号来时(在中断引脚发生了下降沿),先由硬件完成中断标志位的变化.在由硬件完成PC指针的入栈,记录被中断进程的的地址.在由硬件完成PC指针装入中断线程的入口地址.PC指针装入中断线程入口地址后,单片机开始执行中断线程(指定一个输出脚由1变0).由于中断线程中可能用到被中断进程的资源,所以要先保护原进程的资源状态如ACC,PSW等等,当中断线程执行完成后在恢复原进程的资源状态.我的理解就是这样的说的不好也别怪我啦!相互学习啦!52岁还在学习!这就够我学的啦!向你学习!
你说的太复杂了.简单点就是:
中断响应时,程序会自动跳到ROM开头的几个中断地址之一,(具体要看什么中断,书上能查到),这几个地址应该写上转移指令(指向你写的中断处理程序),程序到这几运行后就会转移到你写的你写的中断处理程序运行.
中断时单片机会自动记下在什么地址响应中断的,中断处理程序最后一句“RETI”(没记错吧?)就是告诉单片机返回到响应中断时记下的地方.
中断处理程序一般要保护现场,就是保存下响应中断时正在使用并且后面还要使用的一些寄存器内容,这个问题只要把堆栈搞懂就是小菜一碟.
试验中断可以把断点设在中断处理程序内,运行中在此停下就说明发生了中断.
或者在中断处理程序内进行写RAM的操作,运行后这个RAM地址被写入就说明发生了中断.
初学者对中断是个难点,可以先编些简单的程序试验,只要能产生你需要的中断后面的就好办了.
自学单片机关键就在多试,有些不懂的地方编些小程序多试试就能搞通.当然试硬件中断需要有相应的硬件,限可以先试定时器中断,这用软件仿真就可以.
中断响应时,程序会自动跳到ROM开头的几个中断地址之一,(具体要看什么中断,书上能查到),这几个地址应该写上转移指令(指向你写的中断处理程序),程序到这几运行后就会转移到你写的你写的中断处理程序运行.
中断时单片机会自动记下在什么地址响应中断的,中断处理程序最后一句“RETI”(没记错吧?)就是告诉单片机返回到响应中断时记下的地方.
中断处理程序一般要保护现场,就是保存下响应中断时正在使用并且后面还要使用的一些寄存器内容,这个问题只要把堆栈搞懂就是小菜一碟.
试验中断可以把断点设在中断处理程序内,运行中在此停下就说明发生了中断.
或者在中断处理程序内进行写RAM的操作,运行后这个RAM地址被写入就说明发生了中断.
初学者对中断是个难点,可以先编些简单的程序试验,只要能产生你需要的中断后面的就好办了.
自学单片机关键就在多试,有些不懂的地方编些小程序多试试就能搞通.当然试硬件中断需要有相应的硬件,限可以先试定时器中断,这用软件仿真就可以.
0
回复
提示
@zyqag
楼主, 我有个同事,1953年出生的.他是2001年后,才学单片机.湖北人近几年,他已经很熟悉,MCU开发,例如电饭煲,倒车雷达,温度控制板,棉花湿度仪..... 非常在行,他原来是,技校毕业 我本身,也是32岁才,真正编程.许多人说,30岁后,不宜从事软件编程.我觉得,不妥.俺,现在连复杂的,小波变换及其应用,DSP常用算法,也得心就手.我已36岁,这几年,才转行到DSP,MCU编程. 以前,我是画电路板的,PROTEL99,仅仅是硬件工程师 不过,现在算是DSP,MCU行家 一起努力
您讲的太好了,我要非常奴力才行,谢谢鼓力.我正准备学PRTEL99呢,拜你为老师不要推词奥.我买不到有关资料.
0
回复
提示
@njyd
你说的太复杂了.简单点就是: 中断响应时,程序会自动跳到ROM开头的几个中断地址之一,(具体要看什么中断,书上能查到),这几个地址应该写上转移指令(指向你写的中断处理程序),程序到这几运行后就会转移到你写的你写的中断处理程序运行. 中断时单片机会自动记下在什么地址响应中断的,中断处理程序最后一句“RETI”(没记错吧?)就是告诉单片机返回到响应中断时记下的地方. 中断处理程序一般要保护现场,就是保存下响应中断时正在使用并且后面还要使用的一些寄存器内容,这个问题只要把堆栈搞懂就是小菜一碟. 试验中断可以把断点设在中断处理程序内,运行中在此停下就说明发生了中断. 或者在中断处理程序内进行写RAM的操作,运行后这个RAM地址被写入就说明发生了中断. 初学者对中断是个难点,可以先编些简单的程序试验,只要能产生你需要的中断后面的就好办了. 自学单片机关键就在多试,有些不懂的地方编些小程序多试试就能搞通.当然试硬件中断需要有相应的硬件,限可以先试定时器中断,这用软件仿真就可以.
谢谢您:怎么说呢你讲的很现实,我明白一点就是不管过程如何,目地达到就行.过程以后再说,也可能不说就明白了.哈哈高兴那么多热心人.
0
回复
提示