• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts




Re: 燒錄時間太長
高級會員
高級會員


1. MPLAB IDE v7.2 可以 Import Hex file.
2. Porgrammer -> PICSTRAT PLUS -> Setting
Auto 選項 可以燒錄程式大小, 不是 ROM size,
應該可以快一點

發表於: 2005/8/9 12:59
IWC
IWC
JL
Rolex


PP
有點距離
越來越遠
頂部


Re: 請問一下C18函式庫
高級會員
高級會員


這。。。。。應該沒有吧
我知道CCS 有三角函數
用MCU算這麼複雜的數學有一點。。。。
不如你幫他算一算用查表方式還比較有效率

發表於: 2005/8/9 12:29
頂部


Re: 燒錄時間太長
高級會員
高級會員


更新MPLAB IDE 7.11版試試看
7.2版好像不能載入HEX檔案

發表於: 2005/8/9 12:22
頂部


燒錄時間太長
新會員
新會員



燒錄時間太長

我使用的IC是16F57
燒錄器PICSTART plus
程式長度約240 Byte

可是在MPLAB中燒錄時都要燒錄到2048 Byte
浪費不少時間
各位先進是否有比較好的方式
可以縮減燒錄時間

謝謝!!!!!

發表於: 2005/8/9 11:22
頂部


Re: 電源問題
新會員
新會員


另外一個建議

我之前也是在24V的輸入電源要取用5V的控制電源
那我就用了7818/7810/7805
其中加了散熱片7805也是會非常燙

其實78系列的電壓調整ic轉換效率是非常差的
多餘的電力都變成熱源消耗出來了

之後我就採用LM2575-5 Switcher Voltage Regulator
不過還要再加上"電感""Schottky Diode"
不過效率真的比78XX還好

不過也有發現模組化的電壓調整器
它是把IC,電感,二極體,做成一個組件.

以上意見參考看看




發表於: 2005/8/9 10:59
頂部


Re: 電源問題
高級會員
高級會員


可以是一下DC TO DC
TI有那真的很爽,溫度超低,TI可以提供DEMO BOARD
先弄一個來玩玩看
我一次跟他要了三組,不過前提是要跟他買IC啦有一點麻煩


發表於: 2005/8/9 10:41
頂部


請問內部RC四倍頻怎麼弄?
資深會員
資深會員


我剛剛在測試PIC18F8627
PDF上說可以使用內部RC震盪器四倍頻
但只限於4M與8M

震盪器設定方式如下
CONFIG  =  INTIO67

    MOVLW   
B'01100011'
    
MOVWF   OSCCON
    MOVLW   
B'01000000'
    
MOVWF   OSCTUNE

他要求的兩個條件我都有達到
但結果卻只有4MHz並無四倍頻為16MHz
請問還缺少哪個條件呢?

發表於: 2005/8/9 10:26
頂部


Re: ADRESH和ADRESL
高級會員
高級會員


謝謝你們的回答

不過我發現是不是用這個指令就可以把10bit的值讀出來了呢

ReadADC()

發表於: 2005/8/9 9:34
頂部


Re: MCP42XXX的SPI傳輸
高級會員
高級會員


;****************************************************************************************
; *
; *
; Software License Agreement *
; *
; The software supplied herewith by Microchip Technology Incorporated *
; (the ompany?for its PICmicro?Microcontroller is intended and supplied *
; PICmicro Microcontroller to you, the Company customer, for use solely and *
; exclusively on Microchip products. *
; The software is owned by the Company and/or its supplier, and is protected *
; under applicable copyright laws. All rights are reserved. Any use in violation *
; of the foregoing restrictions may subject the user to criminal sanctions under *
; applicable laws, as well as to civil liability for the breach of the terms and *
; conditions of this license. *
; THIS SOFTWARE IS PROVIDED IN AN S IS?CONDITION. NO WARRANTIES, WHETHER *
; EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED *
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO *
; THIS SOFTWARE. THE COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR *
; SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. *
; *
; *
;****************************************************************************************

;****************************************************************************************
; *
; Interfacing Microchip's MCP42xxx digital potentiometer to the PICmicro MCU *
; *
; - THIS PROGRAM IS ABSOLUTE ASSMEBLY USING THE HARDWARE *
; SPI MODULE TO PROGRAM THE DIGITAL POTENTIOMETER *
; *
; *
;****************************************************************************************
; *
; *
; Filename: POTSPI1.ASM *
; Date: 11.07.2000 *
; File Version: 1.00 *
; *
; Assembler: MPASM VERSION 2.50 *
; *
; PROGRAMER: PRO MATE DEVICE PROGRAMMER, VERSION 5.20.00 *
; *
; File Required: PIC16F876.inc *
; *
; Author: Ezana Haile *
; Company: Microchip Technology Incorporated *
; *
; *
;****************************************************************************************
; *
; *
; This code demonstrates how Microchip's MCP42xxx Digital Potentiometer *
; (Pot) is interfaced to the PICmicro MCU (PIC16F876). The Potentiometer *
; requires a serial communication to porgram the command byte and the data *
; byte. This MCU has a built-in Serial Peripheral Interface (SPI) which can *
; be used to program the pot effectively. The following program illustrates *
; how to interface the digital pot using the MCU's SPI. *
; *
; To change the command byte or the Pot wiper possition the user must change *
; the COMMAND and R_VALUE variables properly and reprogram the MCU. *
; *
; *
;****************************************************************************************


#include <p16f876.inc>
ERRORLEVEL -302
__CONFIG _BODEN_OFF & _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC


;****************************************************************************************
;******************** EQUATES *********************************************************
;****************************************************************************************


CS EQU H'00' ;CHIP SELECT

COMMAND EQU H'13' ;VARIABLE FOR THE COMMAND BYTE
R_VALUE EQU D'140' ;VARIABLE FOR THE RESISTANCE VALUE


;****************************************************************************************
;******************** PROGRAM ORIGIN **************************************************
;****************************************************************************************


ORG 0X00


;----------------------------------------------------------------------------------------
;-------------------- PORTB AND SPI SETTING -------------------------------------------
;----------------------------------------------------------------------------------------


BSF STATUS, RP0 ;SPECIFY BANK 1
MOVLW H'00'
MOVWF TRISA ;SET PORTA AS AN OUTPUT
MOVWF TRISC ;SET PORTB AS AN OUTPUT
BCF STATUS, RP0 ;SPECIFY BANK 0

CLRF PCLATH ;ENSURE PCLATH BIT 3 IS CLEARED
CLRF INTCON ;ENSURE ALL INTERRUPTS ARE DISABLED
MOVLW 0x30 ;
MOVWF SSPCON ;SET SYNC SERIAL PORT CONTROL REGISTER


;----------------------------------------------------------------------------------------
;-------------------- PROGRAM ROUTINE -------------------------------------------------
;----------------------------------------------------------------------------------------


BCF PORTA, CS ;SELECT THE POT

MOVLW COMMAND ;LOAD THE COMMAND BYTE IN THE ACCUMULATOR
CALL TRANSMIT ;TRANSMIT THE COMMAND BYTE

MOVLW R_VALUE ;LOAD THE RESISTANCE VALUE IN THE ACCUMULATOR
CALL TRANSMIT ;TRANSMIT THE RESISTANCE VALUE

BSF PORTA, CS ;UNSELECT THE POT

GOTO FINISH ;FINISH


;----------------------------------------------------------------------------------------
;-------------------- TRANSMISION SUBROUTINE ------------------------------------------
;----------------------------------------------------------------------------------------


TRANSMIT BCF STATUS, RP0 ;SPECIFY BANK 0
MOVWF SSPBUF ;PLACE DATA IN BUFFER TO SEND

BSF STATUS, RP0 ;SPECIFY BANK 1
LOOP BTFSS SSPSTAT, BF ;CHECK IF TRANSMISSION IS COMPLETE
GOTO LOOP ;
BCF STATUS, RP0 ;SPECIFY BANK 0

RETURN ;RETURN FROM SUBROUTINE


;****************************************************************************************


FINISH GOTO FINISH

END


;******************** END OF PROGRAM **************************************************


如果嫌組合語言難懂可以參考一下CCS C compiler code
我不習慣使用他內建函數所以用自己的方式寫這樣要移植到其他的MCU比較方便
#include <12f675.h>
#fuses INTRC_IO,NOWDT,NOPROTECT, NOMCLR
#use delay(clock=4000000)
//int8 PORTDATA;

#define GP0 PIN_A0
#define GP1 PIN_A1
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5
#define P_CS GP0 // pin7
#define P_DI GP1 // pin6
#define P_CLK GP2 // pin5
#define P_KEY1 GP3 // pin4
#define P_KEY2 GP4 // pin3
//#define P_SCL GP4
#zero_ram // clear all RAM memory
#define COMMAND 0X13
//#define R_VALUE 140
int8 R_VALUE;
/*
**********************************************************************
***** Date: 2005-08-08
***** version : 1.0
**********************************************************************
for Microchip asm

TRANSMIT MOVWF OUT ;MOVE W TO 'OUT' VARIABLE

MOVLW 0X08 ;LOAD A COUNTER TO 'COUNT' THE BIT
MOVWF COUNT ;TRANSMISSION

L_SHIFT BTFSC OUT, 7 ;MONITOR THE 7TH BIT
GOTO HI
BCF PORTC, SI ;IF LOW: CLEAR SERIAL-IN LINE
GOTO PASS
HI BSF PORTC, SI ;IF HI: SET SERIAL-IN LINE

PASS BSF PORTC, SCLK ;SET SERIAL CLOCK: HI
RLF OUT, F ;ROTATE OUT LEFT
BCF PORTC, SCLK ;SET SERIAL CLOCK: LOW

DECFSZ COUNT, F ;DECREMENT COUNTER UNTIL ITS ZERO
GOTO L_SHIFT

CLRF PORTC ;WHEN COUNTER IS ZERO IT'S END OF
;TRANSMISSION
RETURN ;RETURN FROM SUBROUTINE

*/
//*************************************
//***** SPI CLOCK 產生程式
//*************************************
void SEND_SPI(int8 data)
{
int8 i;
for (i=0;i<8;i++)
{
if ( data & 0x80)
output_high(P_DI);
else
output_low(P_DI);

output_high(P_CLK);
data <<=1;
output_low(P_CLK);

}
}
//****************************************
//***** 送出電阻值 *****
//****************************************
void SEND_RVALUE(void)
{
output_low(P_CS);
SEND_SPI(COMMAND);
SEND_SPI(R_VALUE);
output_high(P_CS);

}
//*****************************************
//***** 剛剛開機時一些設定 *****
//***** 將MCP41010設定在中心值 *****
//*****************************************
void POWER_ON_INIT(void)
{
set_tris_a(0xf8);
R_VALUE = 140;
SEND_RVALUE();
}
//***************************************
//****** 檢查按鍵 *****
//***************************************
void CHECK_KEY(void)
{
if ((input(P_KEY1))&&(input(P_KEY2)))
return;
if (!input(P_KEY1)) // if key1 input
{
R_VALUE++;
SEND_RVALUE(); // send the r_value to MCP41010
while(!input(P_KEY1)); // wait KEY1 = 1
return;
}
if (!input(P_KEY2)) // if key2 input
{
R_VALUE--;
SEND_RVALUE();
while(!input(P_KEY2));
return;
}

}
//*********************************
//***** main Loop *****
//*********************************
void main(void)
{
POWER_ON_INIT(); // power on initial setup
while(1)
{
CHECK_KEY(); // read key detect

}
}
因為我也在試這一顆IC昨天剛好實驗成功所以可以交流一下
我還沒有測試靜電,電源雜訊方面的測試所以這一方面的對策麻煩自己加上如果發現BUG麻煩你貼上來,我也可以順變更新一下,感恩啊。
剛剛我又改良一下程式
CCS PCM C Compiler, Version 3.222, 16465 09-八月-05 12:05

Filename: D:\Microchip\P12F675\mcp41010_test\v050808\mcp41010.LST

ROM used: 132 words (13%)
Largest free fragment is 892
RAM used: 3 (5%) at main() level
5 (8%) worst case
Stack: 3 locations

*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 004
0003: NOP
0004: CALL 3FF
0005: BSF 03.5
0006: MOVWF 10
0007: MOVLW 00
0008: MOVWF 0A
0009: GOTO 060
.................... /*
.................... #include <p16f876.inc>
.................... ERRORLEVEL -302
.................... __CONFIG _BODEN_OFF & _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC
....................
....................
.................... ;****************************************************************************************
.................... ;******************** VARIABLES *******************************************************
.................... ;****************************************************************************************
....................
....................
.................... CBLOCK H'20'
.................... OUT, COUNT ;VARIABLES USED TO TRANSMIT SERIAL DATA
.................... ENDC
....................
....................
.................... ;****************************************************************************************
.................... ;******************** EQUATES *********************************************************
.................... ;****************************************************************************************
....................
....................
.................... CS EQU H'00' ;PORTC: <7> CHIP SELECT
.................... SCLK EQU H'03' ; <6> SERIAL CLOCK
.................... SI EQU H'05' ; <5> SERIAL DATA
....................
.................... COMMAND EQU H'13' ;VARIABLE FOR THE COMMAND BYTE
.................... R_VALUE EQU D'140' ;VARIABLE FOR THE RESISTANCE VALUE
....................
....................
.................... ;****************************************************************************************
.................... ;******************** PROGRAM ORIGIN **************************************************
.................... ;****************************************************************************************
....................
....................
.................... ORG 0x00
....................
....................
.................... ;----------------------------------------------------------------------------------------
.................... ;-------------------- PORT SETTING ----------------------------------------------------
.................... ;----------------------------------------------------------------------------------------
....................
....................
.................... BCF STATUS, RP0 ;MAKE SURE TO BE IN BANK 0
.................... BCF STATUS, RP1 ;
....................
.................... BSF STATUS, RP0 ;GO TO BANK 1
.................... MOVLW 0x00
.................... MOVWF TRISA ;MAKE PORTA AN OUTPUT
.................... MOVWF TRISC ;MAKE PORTC AN OUTPUT
.................... BCF STATUS, RP0 ;RETURN TO BANK 0
....................
.................... CLRF PORTC ;CLEAR PORTB
....................
....................
.................... ;----------------------------------------------------------------------------------------
.................... ;-------------------- PROGRAM ROUTINE -------------------------------------------------
.................... ;----------------------------------------------------------------------------------------
....................
....................
.................... BCF PORTA, CS ;SELECT THE POT
....................
.................... MOVLW COMMAND ;LOAD THE COMMAND BYTE IN THE ACCUMULATOR
.................... CALL TRANSMIT ;TRANSMIT THE COMMAND BYTE
....................
.................... MOVLW R_VALUE ;LOAD THE RESISTANCE VALUE IN THE ACCUMULATOR
.................... CALL TRANSMIT ;TRANSMIT THE RESISTANCE VALUE
....................
.................... BSF PORTA, CS ;UNSELECT THE POT
....................
.................... GOTO FINISH ;FINISH
....................
....................
.................... ;----------------------------------------------------------------------------------------
.................... ;-------------------- TRANSMISION SUBROUTINE ------------------------------------------
.................... ;----------------------------------------------------------------------------------------
....................
....................
.................... TRANSMIT MOVWF OUT ;MOVE W TO 'OUT' VARIABLE
....................
.................... MOVLW 0X08 ;LOAD A COUNTER TO 'COUNT' THE BIT
.................... MOVWF COUNT ;TRANSMISSION
....................
.................... L_SHIFT BTFSC OUT, 7 ;MONITOR THE 7TH BIT
.................... GOTO HI
.................... BCF PORTC, SI ;IF LOW: CLEAR SERIAL-IN LINE
.................... GOTO PASS
.................... HI BSF PORTC, SI ;IF HI: SET SERIAL-IN LINE
....................
.................... PASS BSF PORTC, SCLK ;SET SERIAL CLOCK: HI
.................... RLF OUT, F ;ROTATE OUT LEFT
.................... BCF PORTC, SCLK ;SET SERIAL CLOCK: LOW
....................
.................... DECFSZ COUNT, F ;DECREMENT COUNTER UNTIL ITS ZERO
.................... GOTO L_SHIFT
....................
.................... CLRF PORTC ;WHEN COUNTER IS ZERO IT'S END OF
.................... ;TRANSMISSION
.................... RETURN ;RETURN FROM SUBROUTINE
....................
....................
.................... ;****************************************************************************************
....................
....................
.................... FINISH GOTO FINISH
....................
.................... END
....................
....................
.................... ;******************** END OF PROGRAM **************************************************
....................
.................... #endif
.................... */
.................... //**************************************************************
.................... //***** program by XXXXX保留
.................... //***** Date : 2005-08-08
.................... //***** Version : 1.0
.................... //***** SPI communication
.................... //***** controller MCP41010
.................... //**************************************************************
....................
.................... #include <12f675.h>
.................... //////// Standard Header file for the PIC12F675 device ////////////////
.................... #device PIC12F675
.................... #list
....................
.................... #fuses INTRC_IO,NOWDT,NOPROTECT, NOMCLR
.................... #use delay(clock=4000000)
*
004B: MOVLW 23
004C: MOVWF 04
004D: MOVF 00,W
004E: BTFSC 03.2
004F: GOTO 05F
0050: MOVLW 01
0051: MOVWF 21
0052: CLRF 20
0053: DECFSZ 20,F
0054: GOTO 053
0055: DECFSZ 21,F
0056: GOTO 052
0057: MOVLW 4A
0058: MOVWF 20
0059: DECFSZ 20,F
005A: GOTO 059
005B: NOP
005C: NOP
005D: DECFSZ 00,F
005E: GOTO 050
005F: GOTO 082 (RETURN)
.................... //int8 PORTDATA;
.................... #byte gpio = 05
.................... #bit P_CS = gpio.0
.................... #bit P_DI = gpio.1
.................... #bit P_CLK = gpio.2
.................... #bit P_KEY1 = gpio.3
.................... #bit P_KEY2 = gpio.4
.................... #bit P_DEBUG = gpio.5
.................... /*
.................... #define GP0 PIN_A0
.................... #define GP1 PIN_A1
.................... #define GP2 PIN_A2
.................... #define GP3 PIN_A3
.................... #define GP4 PIN_A4
.................... #define GP5 PIN_A5
.................... #define P_CS GP0 // pin7
.................... #define P_DI GP1 // pin6
.................... #define P_CLK GP2 // pin5
.................... #define P_KEY1 GP3 // pin4
.................... #define P_KEY2 GP4 // pin3
.................... #define P_DEBUG GP5 // PIN2
.................... */
.................... //#define P_SCL GP4
.................... #zero_ram // clear all RAM memory
.................... #define COMMAND 0X13
.................... //#define R_VALUE 140
.................... int8 R_VALUE;
.................... /*
.................... **********************************************************************
.................... ***** program by 保留
.................... ***** Date: 2005-08-08
.................... ***** version : 1.0
.................... **********************************************************************
.................... for Microchip asm
....................
.................... TRANSMIT MOVWF OUT ;MOVE W TO 'OUT' VARIABLE
....................
.................... MOVLW 0X08 ;LOAD A COUNTER TO 'COUNT' THE BIT
.................... MOVWF COUNT ;TRANSMISSION
....................
.................... L_SHIFT BTFSC OUT, 7 ;MONITOR THE 7TH BIT
.................... GOTO HI
.................... BCF PORTC, SI ;IF LOW: CLEAR SERIAL-IN LINE
.................... GOTO PASS
.................... HI BSF PORTC, SI ;IF HI: SET SERIAL-IN LINE
....................
.................... PASS BSF PORTC, SCLK ;SET SERIAL CLOCK: HI
.................... RLF OUT, F ;ROTATE OUT LEFT
.................... BCF PORTC, SCLK ;SET SERIAL CLOCK: LOW
....................
.................... DECFSZ COUNT, F ;DECREMENT COUNTER UNTIL ITS ZERO
.................... GOTO L_SHIFT
....................
.................... CLRF PORTC ;WHEN COUNTER IS ZERO IT'S END OF
.................... ;TRANSMISSION
.................... RETURN ;RETURN FROM SUBROUTINE
....................
.................... */
.................... //*************************************
.................... //***** SPI CLOCK 產生程式
.................... //*************************************
.................... void SEND_SPI(int8 data)
.................... {
.................... int8 i;
.................... for (i=0;i<8;i++)
*
000A: CLRF 24
000B: MOVF 24,W
000C: SUBLW 07
000D: BTFSS 03.0
000E: GOTO 01A
.................... {
.................... if ( data & 0x80)
000F: BTFSS 23.7
0010: GOTO 013
.................... P_DI = 1; //output_high(P_DI);
0011: BSF 05.1
.................... else
0012: GOTO 014
.................... P_DI = 0; //output_low(P_DI);
0013: BCF 05.1
....................
.................... P_CLK = 1; //output_high(P_CLK);
0014: BSF 05.2
.................... data <<=1;
0015: BCF 03.0
0016: RLF 23,F
.................... P_CLK = 0; //output_low(P_CLK);
0017: BCF 05.2
....................
.................... }
0018: INCF 24,F
0019: GOTO 00B
.................... }
001A: RETLW 00
.................... //****************************************
.................... //***** 送出電阻值 *****
.................... //****************************************
.................... void SEND_RVALUE(void)
.................... {
.................... P_CS = 0; //output_low(P_CS);
001B: BCF 05.0
.................... SEND_SPI(COMMAND);
001C: MOVLW 13
001D: MOVWF 23
001E: CALL 00A
.................... SEND_SPI(R_VALUE);
001F: MOVF 22,W
0020: MOVWF 23
0021: CALL 00A
.................... P_CS = 1; //output_high(P_CS);
0022: BSF 05.0
....................
.................... }
0023: RETLW 00
.................... //*****************************************
.................... //***** 剛剛開機時一些設定 *****
.................... //***** 將MCP41010設定在中心值 *****
.................... //*****************************************
.................... void POWER_ON_INIT(void)
.................... {
.................... set_tris_a(0x18);
0024: MOVLW 18
0025: BSF 03.5
0026: MOVWF 05
.................... R_VALUE = 140;
0027: MOVLW 8C
0028: BCF 03.5
0029: MOVWF 22
.................... SEND_RVALUE();
002A: CALL 01B
.................... }
002B: GOTO 07D (RETURN)
.................... //***************************************
.................... //****** 檢查按鍵 *****
.................... //***************************************
.................... void CHECK_KEY(void)
.................... {
.................... if ((P_KEY1==1)&&(P_KEY2==1)) //((input(P_KEY1))&&(input(P_KEY2)))
002C: BTFSS 05.3
002D: GOTO 030
002E: BTFSC 05.4
.................... return;
002F: GOTO 044
.................... if (P_KEY1==0) //(!input(P_KEY1)) // if key1 input
0030: BTFSC 05.3
0031: GOTO 03A
.................... {
.................... R_VALUE++;
0032: INCF 22,F
.................... if (R_VALUE >=255)
0033: INCFSZ 22,W
0034: GOTO 036
.................... R_VALUE = 0;
0035: CLRF 22
.................... SEND_RVALUE(); // send the r_value to MCP41010
0036: CALL 01B
.................... while(P_KEY1==0); //(!input(P_KEY1)); // wait KEY1 = 1
0037: BTFSS 05.3
0038: GOTO 037
.................... return;
0039: GOTO 044
.................... }
.................... if (P_KEY2==0) //(!input(P_KEY2)) // if key2 input
003A: BTFSC 05.4
003B: GOTO 044
.................... {
.................... R_VALUE--;
003C: DECFSZ 22,F
.................... if (R_VALUE==0)
003D: GOTO 040
.................... R_VALUE = 255;
003E: MOVLW FF
003F: MOVWF 22
.................... SEND_RVALUE();
0040: CALL 01B
.................... while (P_KEY2==0); //(!input(P_KEY2));
0041: BTFSS 05.4
0042: GOTO 041
.................... return;
0043: GOTO 044
.................... }
....................
.................... }
0044: GOTO 07E (RETURN)
.................... void debug_pin(void)
.................... {
.................... P_DEBUG = 0; //output_low(P_DEBUG);
0045: BCF 05.5
.................... delay_us(3);
0046: NOP
0047: NOP
0048: NOP
.................... P_DEBUG = 1; //output_high(P_DEBUG);
0049: BSF 05.5
.................... }
004A: GOTO 07F (RETURN)
.................... //*********************************
.................... //***** main Loop *****
.................... //*********************************
.................... void main(void)
.................... {
*
0060: MOVLW 1F
0061: ANDWF 03,F
0062: MOVLW 3F
0063: MOVWF 20
0064: MOVLW 21
0065: MOVWF 04
0066: CLRF 00
0067: INCF 04,F
0068: DECFSZ 20,F
0069: GOTO 066
006A: CLRF 20
006B: CLRF 04
006C: MOVLW 1F
006D: ANDWF 03,F
006E: BCF 1F.6
006F: BSF 03.5
0070: BCF 1F.0
0071: BCF 1F.1
0072: BCF 1F.2
0073: BCF 1F.3
0074: MOVLW 07
0075: BCF 03.5
0076: MOVWF 19
0077: BSF 03.5
0078: MOVF 05,W
0079: BCF 03.5
007A: MOVF 19,W
007B: BCF 0C.3
.................... POWER_ON_INIT(); // power on initial setup
007C: GOTO 024
.................... while(1)
.................... {
.................... CHECK_KEY(); // read key detect
007D: GOTO 02C
.................... debug_pin();
007E: GOTO 045
.................... delay_ms(5);
007F: MOVLW 05
0080: MOVWF 23
0081: GOTO 04B
.................... }
0082: GOTO 07D
.................... }
....................
0083: SLEEP

Configuration Fuses:
Word 1: 31D4 NOWDT NOCPD NOPROTECT NOMCLR NOPUT INTRC_IO BROWNOUT
C 寫是比較快但是CODE比較大所以我又改變方式這樣看起來比較像是組合語言寫的
CODE也比較短。

CC


發表於: 2005/8/9 8:01
頂部


Re: MCP42XXX的SPI傳輸
高級會員
高級會員


我剛好有sample code,這是使用軟體模擬SPI介面,
下面那一個是硬體介面(MCU內含的SPI)範例程式
再下面是CCS C 寫的那是測試版本可能有BUG不過可以動作啦
因為只花十分鐘寫的,還沒有使用滿清十大酷刑伺候過,所以麻煩自己TRY一下。

#include <p16f876.inc>
ERRORLEVEL -302
__CONFIG _BODEN_OFF & _PWRTE_OFF & _CP_OFF & _WDT_OFF & _XT_OSC


;****************************************************************************************
;******************** VARIABLES *******************************************************
;****************************************************************************************


CBLOCK H'20'
OUT, COUNT ;VARIABLES USED TO TRANSMIT SERIAL DATA
ENDC


;****************************************************************************************
;******************** EQUATES *********************************************************
;****************************************************************************************


CS EQU H'00' ;PORTC: <7> CHIP SELECT
SCLK EQU H'03' ; <6> SERIAL CLOCK
SI EQU H'05' ; <5> SERIAL DATA

COMMAND EQU H'13' ;VARIABLE FOR THE COMMAND BYTE
R_VALUE EQU D'140' ;VARIABLE FOR THE RESISTANCE VALUE


;****************************************************************************************
;******************** PROGRAM ORIGIN **************************************************
;****************************************************************************************


ORG 0x00


;----------------------------------------------------------------------------------------
;-------------------- PORT SETTING ----------------------------------------------------
;----------------------------------------------------------------------------------------


BCF STATUS, RP0 ;MAKE SURE TO BE IN BANK 0
BCF STATUS, RP1 ;

BSF STATUS, RP0 ;GO TO BANK 1
MOVLW 0x00
MOVWF TRISA ;MAKE PORTA AN OUTPUT
MOVWF TRISC ;MAKE PORTC AN OUTPUT
BCF STATUS, RP0 ;RETURN TO BANK 0

CLRF PORTC ;CLEAR PORTB


;----------------------------------------------------------------------------------------
;-------------------- PROGRAM ROUTINE -------------------------------------------------
;----------------------------------------------------------------------------------------


BCF PORTA, CS ;SELECT THE POT

MOVLW COMMAND ;LOAD THE COMMAND BYTE IN THE ACCUMULATOR
CALL TRANSMIT ;TRANSMIT THE COMMAND BYTE

MOVLW R_VALUE ;LOAD THE RESISTANCE VALUE IN THE ACCUMULATOR
CALL TRANSMIT ;TRANSMIT THE RESISTANCE VALUE

BSF PORTA, CS ;UNSELECT THE POT

GOTO FINISH ;FINISH


;----------------------------------------------------------------------------------------
;-------------------- TRANSMISION SUBROUTINE ------------------------------------------
;----------------------------------------------------------------------------------------


TRANSMIT MOVWF OUT ;MOVE W TO 'OUT' VARIABLE

MOVLW 0X08 ;LOAD A COUNTER TO 'COUNT' THE BIT
MOVWF COUNT ;TRANSMISSION

L_SHIFT BTFSC OUT, 7 ;MONITOR THE 7TH BIT
GOTO HI
BCF PORTC, SI ;IF LOW: CLEAR SERIAL-IN LINE
GOTO PASS
HI BSF PORTC, SI ;IF HI: SET SERIAL-IN LINE

PASS BSF PORTC, SCLK ;SET SERIAL CLOCK: HI
RLF OUT, F ;ROTATE OUT LEFT
BCF PORTC, SCLK ;SET SERIAL CLOCK: LOW

DECFSZ COUNT, F ;DECREMENT COUNTER UNTIL ITS ZERO
GOTO L_SHIFT

CLRF PORTC ;WHEN COUNTER IS ZERO IT'S END OF
;TRANSMISSION
RETURN ;RETURN FROM SUBROUTINE


;****************************************************************************************


FINISH GOTO FINISH

END


;******************** END OF PROGRAM **************************************************

發表於: 2005/8/9 8:00
頂部



« 1 ... 6979 6980 6981 (6982) 6983 6984 6985 ... 7522 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------