请选择 进入手机版 | 继续访问电脑版
搜索
查看: 192|回复: 7

新手求助

[复制链接]
发表于 2018-3-13 09:49:37 | 显示全部楼层 |阅读模式
我想用mplb写汇编程序,可是只写汇编程序没法执行,有没有人能给我写个就是mov #0x4322,w0         mov #0x6434,w1     add   w0,w1,w2然后能编译通过的程序,
回复

使用道具 举报

 楼主| 发表于 2018-3-13 15:06:47 | 显示全部楼层
还有新的问题,只使用.if编译不通过,提示Error: non-constant expression in ".if" statement,应该怎么做啊   
回复 支持 反对

使用道具 举报

发表于 2018-3-13 16:37:27 | 显示全部楼层
语法不对,你那是51的汇编语法吧?
回复 支持 反对

使用道具 举报

发表于 2018-3-13 16:38:38 | 显示全部楼层
贴一个我在其他论坛写的程序
  1. #include "p16f1619.inc"
  2. ; CONFIG1
  3. ; __config 0x3FFC
  4. __CONFIG _CONFIG1, _FOSC_INTOSC & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _BOREN_ON & _CLKOUTEN_OFF & _IESO_ON & _FCMEN_ON
  5. ; CONFIG2
  6. ; __config 0x3EFF
  7. __CONFIG _CONFIG2, _WRT_OFF & _PPS1WAY_ON & _ZCD_OFF & _PLLEN_OFF & _STVREN_ON & _BORV_LO & _LPBOR_OFF & _LVP_ON
  8. ; CONFIG3
  9. ; __config 0x3F9F
  10. __CONFIG _CONFIG3, _WDTCPS_WDTCPS1F & _WDTE_OFF & _WDTCWS_WDTCWSSW & _WDTCCS_SWC
  11. ;*******************************************************************************
  12.     CBLOCK 0x20
  13.        SHIFTDAT                    ;作为跑马灯状态标识
  14.        DELAY_A
  15.        DELAY_B
  16.        DELAY_C
  17.     ENDC
  18. ;*******************************************************************************
  19. RES_VECT  CODE    0x0000            ; processor reset vector
  20.     GOTO    START                   ; go to beginning of program
  21. ; MAIN PROGRAM
  22. ;*******************************************************************************

  23. MAIN_PROG CODE                      ; let linker place main program
  24. START
  25.     ;***************************************************************************
  26.     ;初始化时钟
  27.     BANKSEL        OSCCON
  28.     MOVLW        0x70               
  29.     MOVWF        OSCCON                ;8MHZ内部时钟
  30.     CLRF        OSCTUNE
  31.     ;***************************************************************************
  32.     ;初始化PORTA
  33.     BANKSEL        PORTA
  34.     CLRF        PORTA   
  35.     BANKSEL        ANSELA
  36.     CLRF        ANSELA
  37.     BANKSEL        TRISA
  38.     MOVLW        0x00
  39.     MOVWF        TRISA
  40.     ;***************************************************************************
  41.     ;初始化PORTC
  42.     BANKSEL        PORTC
  43.     CLRF        PORTC   
  44.     BANKSEL        ANSELC
  45.     CLRF        ANSELC
  46.     BANKSEL        TRISC   
  47.     CLRF        TRISC
  48. ;*******************************************************************************   
  49. RELOAD
  50.     ;重置SHIFTDAT
  51.     CLRF        BSR                ;切换到bank0,否则第一次运行时立即数1会赋给120H地址
  52.     MOVLW        0x01
  53.     MOVWF        SHIFTDAT
  54. MAIN
  55. ;*******************************************************************************   
  56.     ;主程序
  57.     BTFSC        SHIFTDAT,   4           ;若SHIFTDAT第4位是0,则跳过下一条指令
  58.     GOTO        RELOAD                    ;若SHIFTDAT第4位是1,则无条件跳转到RELOAD重置
  59.     MOVLW        0x01                      ;WREG寄存器赋值B'0000,0001'
  60.     ANDWF        SHIFTDAT,   W        ;SHIFTDAT与WREG逻辑与后的结果存入WREG寄存器
  61.     BTFSC        WREG,            0        ;若WREG第0位是0,则跳过下一条指令
  62.     CALL        D4ON                         ;若WREG第0位是1,则执行本指令
  63.     MOVLW        0x02                      ;依次类推,判断D5是否处于点亮状态
  64.     ANDWF        SHIFTDAT,   W        ;
  65.     BTFSC        WREG,            1        ;
  66.     CALL        D5ON                ;   
  67.     MOVLW        0x04
  68.     ANDWF        SHIFTDAT,   W
  69.     BTFSC        WREG,            2
  70.     CALL        D6ON   
  71.     MOVLW        0x08
  72.     ANDWF        SHIFTDAT,   W
  73.     BTFSC        WREG,            3
  74.     CALL        D7ON   
  75.     RLF                SHIFTDAT,   F
  76.     CALL        DELAY
  77.     GOTO        MAIN
  78. ;*******************************************************************************
  79. ;点亮D4   
  80. D4ON
  81.     CLRF        PORTA
  82.     CLRF        PORTC
  83.     BSF                PORTA,            RA5   
  84.     BCF                PORTC,            RC5
  85.     RETURN
  86. ;*******************************************************************************
  87. ;点亮D5   
  88. D5ON   
  89.     CLRF        PORTA
  90.     BSF                PORTA,            RA1
  91.     BCF                PORTC,            RC5
  92.     RETURN
  93. ;*******************************************************************************
  94. ;点亮D6
  95. D6ON   
  96.     CLRF        PORTA
  97.     BSF                PORTA,            RA2
  98.     BCF                PORTC,            RC5
  99.     RETURN
  100. ;*******************************************************************************
  101. ;点亮D7   
  102. D7ON   
  103.     CLRF        PORTA
  104.     BSF                PORTC,            RC5   
  105.     RETURN   
  106. ;******** 延时子程序 ************************************************************
  107. DELAY
  108.     MOVLW        0x02
  109.     MOVWF        DELAY_A                    ;外循环2
  110. DLY_A
  111.     MOVLW        0xF9   
  112.     MOVWF        DELAY_B                    ;中循环249
  113. DLY_B
  114.     MOVLW        0xFA
  115.     MOVWF        DELAY_C                    ;内循环250
  116. DLY_C
  117.     NOP
  118.     DECFSZ        DELAY_C
  119.     GOTO        DLY_C
  120.     DECFSZ        DELAY_B
  121.     GOTO        DLY_B
  122.     DECFSZ        DELAY_A
  123.     GOTO        DLY_A
  124.     RETURN               

  125.     END        
复制代码
回复 支持 反对

使用道具 举报

发表于 2018-3-13 16:39:21 | 显示全部楼层
  跑马灯实例
  1.功能说明
  利用Curiosity开发板上的D4~D7这四个LED,实现跑马灯效果。
  2.硬件电路
  查阅microchip官方文档DS40001804B可知,D4~D7阴极接地,阳极分别接至RA5、RA1、RA2、RC5。
  当对应的引脚输出高电平时,则该LED点亮。因为开发板没有外置晶振,所以系统时钟源选用内部时
  钟源,这里我们就用8MHZ。
  3.软件设计
  (1)程序关键点分析
  本例的RA和RC端口需要被配置为输出方向,初始化端口输出全为低电平,即D4~D7处于全灭状态。当
  RA5输出高电平,其他引脚输出低电平,则D4亮;延时250ms后,RA1输出高电平,其他引脚输出低电
  平,则D5亮;如此循环,则实现了跑马灯效果。在进行程序设计时,主要涉及的内容如下:
  1)选择配置字,设置系统时钟为内部时钟源。
  2)初始化与内部时钟源相关的寄存器和I/O端口,见PIC16F1619的datasheet的5.6章节。
  2)在主程序中实现循环输出跑马灯效果。
  (2)程序流程图
   图像 1.png.thumb.jpg
  (3)汇编源程序
  1)延时程序如何计算:
  PIC单片机1个指令周期占用4个时钟周期,对于8MHZ的时钟频率,时钟周期为0.125μs,指令周期为
  0.5μs。要实现250ms延时,约等于5.0*10^6个指令周期。
  内循环指令周期(1+1+2)*250-1=999
  中循环指令周期(1+1+inner+1+2)*249-1=249,995
  外循环指令周期(1+1+middle+1+2)*2-1=499,999
  DELAY指令周期 1+1=2
  RETURN指令周期 =2
  总指令周期=外循环+DELAY+RETURN=500,003,约等于5.0*10^6个指令周期
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 10:23:53 | 显示全部楼层
lennon 发表于 2018-3-13 16:39
  跑马灯实例
  1.功能说明
  利用Curiosity开发板上的D4~D7这四个LED,实现跑马灯效果。

我没需要这些东西,我现在要写一个c和汇编混合的项目,汇编的作用是让我把c里的变量进行运算得出结果,我现在有几个问题
1,我写了一个子程序c:代码但是结束的时候 ends c会报错Invalid mnemonic: 'ends',我在开发书里也没找到怎么结束这个子程序
2,我想调用c语言中的变量不知道该怎么调用
3,跟上面差不多, 我不知道该如何对c的变量进行赋值
因为刚开始做所以先碰到了这些基本的问题,希望大神解答
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-14 11:51:24 | 显示全部楼层
还有怎样才能把一个数放到内存里啊    有好多数据寄存器不够用啊
回复 支持 反对

使用道具 举报

发表于 2018-3-14 11:56:09 | 显示全部楼层
建议你看下<mplab xc8 c编译器用户指南> 5.12部分内容,应该对你有帮助。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

facebook google plus twitter linkedin youku weibo rss
©2018 Microchip Corporation

小黑屋|手机版|Archiver|Microchip技术社区

GMT+8, 2018-9-21 06:23 , Processed in 0.073934 second(s), 8 queries , MemCache On.

快速回复 返回顶部 返回列表