打印

程式问题??????

[复制链接]
1734|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小弟用PIC16F819做一个四个视频切换器,我用MPLAB写了一段少少的程式,请各位高手教教一下小弟,需要修改什么吗?
#include <video.h>


void main()
{

        if (!input(PIN_A2))
        {
                if (!input(PIN_A3))
                {
                        output_high(PIN_B1);
            output_low(PIN_B2);
            output_low(PIN_B3);
            output_low(PIN_B5);
       
        }
        else
        {
                if (input(PIN_A3))
                {
               
        
              output_high(PIN_B2);
              output_low(PIN_B1);
              output_low(PIN_B3);
              output_low(PIN_B5);
                }
     else
        {

           if (input(PIN_A2))
        {
                if (!input(PIN_A3))
                {
                        output_high(PIN_B3);
            output_low(PIN_B1);
            output_low(PIN_B2);
            output_low(PIN_B5);
       
        }
        else
        {
                if (input(PIN_A3))
                {
               
        
              output_high(PIN_B5);
              output_low(PIN_B1);
              output_low(PIN_B2);
              output_low(PIN_B3);
  }   

   while (input(PIN_B3)):
{
沙发
NE5532| | 2013-3-11 21:22 | 只看该作者
1.没有硬件电路图,不知楼主所云
2.没有注释
3.程序不完整
4.怀疑楼主灌水

使用特权

评论回复
板凳
waiwai2321|  楼主 | 2013-3-11 22:15 | 只看该作者
不是灌水啊,附上电路图,只是小弟真的是新手,有很多不懂的地方:(
void main()
{

        if (!input(PIN_A2))      当第一个按钮是'0'
        {
                if (!input(PIN_A3))  当第二个按钮也是'0'
                {                                                               会做出以下程序
                        output_high(PIN_B1);              第一个讯号是'1'
            output_low(PIN_B2);                           第二个讯号是'0'
            output_low(PIN_B3);                           第三个讯号是'0'
            output_low(PIN_B5);                           第四个讯号是'0'
        
        }
        else
        {
                if (input(PIN_A3))       当第二个按钮是'1'
                {                                     以下都是跟上面一样的输出模式
               
        
              output_high(PIN_B2);
              output_low(PIN_B1);
              output_low(PIN_B3);
              output_low(PIN_B5);
                }
     else
        {

           if (input(PIN_A2))         当第一个按钮是'1'
        {
                if (!input(PIN_A3))            当第二个按钮是'1'
                {
                        output_high(PIN_B3);
            output_low(PIN_B1);
            output_low(PIN_B2);
            output_low(PIN_B5);
        
        }
        else
        {
                if (input(PIN_A3))                当第二个按钮是'1'
                {
               
        
              output_high(PIN_B5);
              output_low(PIN_B1);
              output_low(PIN_B2);
              output_low(PIN_B3);
  }   

   while (input(PIN_B3)):
}



请教导一下小弟吧,还有以下的程序是什么意思?

#include <16F819.h>
#device ICD=TRUE
#device adc=16

#FUSES NOWDT                         //No Watch Dog Timer
#FUSES NOPUT                         //No Power Up Timer
#FUSES HS                            //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOMCLR                        //Master Clear pin used for I/O
#FUSES NOBROWNOUT                    //No brownout reset
#FUSES NOLVP                         //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                         //No EE protection
#FUSES NOWRT                         //Program memory not write protected
#FUSES NODEBUG                       //No Debug mode for ICD
#FUSES NOPROTECT                     //Code not protected from reading

#use delay(clock=20000000)

vax.gif (11.85 KB )

vax.gif

使用特权

评论回复
地板
yklstudent| | 2013-3-11 23:20 | 只看该作者
看这程序 一看就是CCSC编译器
这个程序内的注释不是已经有了嘛
所以没有没什么需要再多说了吧

#include <16F819.h>
#device ICD=TRUE
#device adc=16

#FUSES NOWDT                         //No Watch Dog Timer
#FUSES NOPUT                         //No Power Up Timer
#FUSES HS                            //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOMCLR                        //Master Clear pin used for I/O
#FUSES NOBROWNOUT                    //No brownout reset
#FUSES NOLVP                         //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                         //No EE protection
#FUSES NOWRT                         //Program memory not write protected
#FUSES NODEBUG                       //No Debug mode for ICD
#FUSES NOPROTECT                     //Code not protected from reading

#use delay(clock=20000000)
以上这些都是CCSC编译器自有的PIC配置方式

使用特权

评论回复
5
waiwai2321|  楼主 | 2013-3-12 00:05 | 只看该作者
我跟着一样去打上去,但有很多的错误还有我写的这一段是行的吗?我到现在一直都不知道是什么的一回事…我是第一次接触利用MPLAB去写的,请各位指教一下

未命名.png (169.07 KB )

未命名.png

使用特权

评论回复
6
waiwai2321|  楼主 | 2013-3-12 00:08 | 只看该作者
还有这一张

未命名.png (170.57 KB )

未命名.png

使用特权

评论回复
7
yklstudent| | 2013-3-12 10:21 | 只看该作者
楼主的问题蛮多了
1、楼主的程序帖的不全,排版不好,看的头疼;
2、ADC=x
Where x is the number of bits read_adc() should return
这里ADC=16是不行的,PIC16F819内部AD最大只有10位
3、看楼主用的编译器应该是MPLAB自带的汇编编译器,这是编译汇编代码的
看楼主的程序明显是CCSC风格方式,麻烦去网上找个CCSC编译器安装,或者改用MPLAB官方C编译器
4、注释麻烦用//,。。。

使用特权

评论回复
8
waiwai2321|  楼主 | 2013-3-12 11:39 | 只看该作者
谢谢指导,小弟愚蠢,我写的程序跟MPLAB自带的汇编编代码应如何使用才叫出HEX档来?小弟真的是第一次用pic的片蕊所以真的不知如何着手

使用特权

评论回复
9
waiwai2321|  楼主 | 2013-3-12 11:59 | 只看该作者
我根据楼上的指导使用CCSC编译器,但总是说我错误

未命名.png (167.99 KB )

未命名.png

使用特权

评论回复
10
yklstudent| | 2013-3-12 13:44 | 只看该作者
本帖最后由 yklstudent 于 2013-3-12 13:45 编辑
waiwai2321 发表于 2013-3-12 11:59
我根据楼上的指导使用CCSC编译器,但总是说我错误

你的程序不全 分析不出来  感觉S3.C也不知道是啥  先查查漏了啥没有没问题的话 最好程序打包上来

使用特权

评论回复
11
fellow2012| | 2013-3-12 19:28 | 只看该作者
台湾那边叫程式  对吧

使用特权

评论回复
12
yklstudent| | 2013-3-12 19:30 | 只看该作者
这里有台胞????

使用特权

评论回复
13
yorkevin2012| | 2013-3-13 09:35 | 只看该作者
还好你的程序并不复杂,小段程序本没问题,问题是来源于你对MPLAB的不熟而已,刚开始学单片机难免的,慢慢的就会上手了。
另外写程序其实就是在理思路,象以上这些问题,我建议大家交换设计思想或是用流程图的方式也可以的,这样简洁明了,现在整一堆的程序给别人看,先不说本身写的怎么样,且一点注释多没,这样可是很难为网上帮你解决的热心朋友的。谁愿意化这么多的心思看一些没有用的程序,来挑骨头。

使用特权

评论回复
14
yewuyi| | 2013-3-13 11:23 | 只看该作者
你这主要是缺少最基本的MCU知识,和用PIC/MPLAB没啥关系,即使用别的厂家MCU和IDE,你也一样存在这些基本知识问题。

使用特权

评论回复
15
waiwai2321|  楼主 | 2013-3-13 17:02 | 只看该作者
谢谢各位的指教,但是我还有两个问题
void main()
{

        if (!input(PIN_A2))      当第一个按钮是'0'
        {
                if (!input(PIN_A3))  当第二个按钮也是'0'
                {                                                               会做出以下程序
                        output_high(PIN_B1);              第一个讯号是'1'
            output_low(PIN_B2);                           第二个讯号是'0'
            output_low(PIN_B3);                           第三个讯号是'0'
            output_low(PIN_B5);                           第四个讯号是'0'
        
        }
        else
        {
                             if (!input(PIN_A2))

                             if (input(PIN_A3))       当第二个按钮是'1'
                {                                     以下都是跟上面一样的输出模式
               
        
              output_high(PIN_B2);
              output_low(PIN_B1);
              output_low(PIN_B3);
              output_low(PIN_B5);
                }
     else    <<<<<<<<<<<<<<<<<<<这个应该是用else去分隔两个指令?
        {

           if (input(PIN_A2))         当第一个按钮是'1'
        {
                if (!input(PIN_A3))            当第二个按钮是'1'
                {
                        output_high(PIN_B3);
            output_low(PIN_B1);
            output_low(PIN_B2);
            output_low(PIN_B5);
        
        }
        else
        {
                if (input(PIN_A3))                当第二个按钮是'1'
                {
               
        
              output_high(PIN_B5);
              output_low(PIN_B1);
              output_low(PIN_B2);
              output_low(PIN_B3);
  }   

   while (input(PIN_B3)):
}



还有的是,我用防真软件去测试程序,但是按下按钮并不是即时运作而是重新开始再显示出黎,这是正常还是我欠了程序?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝