久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1133|回復: 3
打印 上一主題 下一主題
收起左側

DeepSeek編程~香香香

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 taotie 于 2025-2-4 17:25 編輯

將你的想法和要求甩給DeepSeek它就會給出代碼,仿真后如有錯誤將錯誤信息反饋它會修改程序,直至仿真通過。
下面是向DeepSeek提出的要求:

用AVR匯編語言(AVRASM)編寫程序采用前進3步退2步方式運行正向階段--向A點進發電機正轉3秒-停0.5秒-反轉2秒,凈進1秒距離;(期間不斷檢測A點是否觸發,觸發則退出正向階段進入反向階段)反向階段--向B點進發電機正轉3秒-停0.5秒-反轉2秒,凈進1秒距離;(期間不斷檢測B點是否觸發,觸發則退出反向階段進入正向階段)正向階段-反向階段運行3次后停止電機。
DeepSeek經過深度思考后給出初步程序(初步程序略)

經過2次仿真反饋錯誤信息修改,DeepSeek給最終程序:

/*程序說明:
使用Timer1比較匹配中斷實現精確計時(1ms中斷)

通過phase變量跟蹤當前運行階段(正向/反向)

step變量控制三個運行步驟:正轉-停止-反轉

counter變量記錄剩余循環次數(3次完整循環)

電機控制邏輯:

正向階段:PB0正轉,PB1反轉

反向階段:PB1正轉,PB0反轉

傳感器檢測在main循環中持續進行,使用上拉電阻和低電平觸發

當檢測到傳感器觸發時立即切換運行階段并更新計數器

完成3次完整循環后停止電機并禁用中斷*/

.include "m328Pdef.inc"

.def temp = r16
.def phase = r17    ; 0:正向 1:反向
.def step = r18     ; 0:正轉 1:停止 2:反轉
.def counter = r19  ; 循環計數器
.def timerH = r25   ; 定時器高位
.def timerL = r24   ; 定時器低位

.equ MOTOR_PORT = PORTB
.equ MOTOR_DDR = DDRB
.equ MOTOR_A = PB0
.equ MOTOR_B = PB1
.equ SENSOR_A = PD2
.equ SENSOR_B = PD3

.cseg
.org 0x0000
    jmp reset
.org OC1Aaddr
    jmp TIMER1_COMPA

reset:
    ldi temp, HIGH(RAMEND)
    out SPH, temp
    ldi temp, LOW(RAMEND)
    out SPL, temp

    ldi temp, (1<<MOTOR_A)|(1<<MOTOR_B)
    out MOTOR_DDR, temp        ; 設置電機控制引腳為輸出
    cbi MOTOR_PORT, MOTOR_A    ; 初始停止狀態
    cbi MOTOR_PORT, MOTOR_B

    ldi temp, 0
    out DDRD, temp             ; 設置傳感器引腳為輸入
    ldi temp, (1<<SENSOR_A)|(1<<SENSOR_B)
    out PORTD, temp            ; 使能上拉電阻

    ldi phase, 0               ; 初始相位:正向
    ldi counter, 6             ; 循環計數器
    ldi step, 0                ; 初始步驟:正轉

    ; 配置Timer1 (CTC模式, 1ms中斷)
    ldi temp, (1<<WGM12)|(1<<CS11) ; CTC模式, 預分頻8
    sts TCCR1B, temp
    ldi temp, HIGH(1999)       ; 16MHz/8/(1999+1) = 1kHz
    sts OCR1AH, temp
    ldi temp, LOW(1999)
    sts OCR1AL, temp
    ldi temp, (1<<OCIE1A)      ; 使能比較匹配中斷
    sts TIMSK1, temp

    sei                        ; 全局中斷使能
    rcall set_motor            ; 初始電機狀態
    rcall set_timer            ; 設置初始定時

main:
    ; 檢測傳感器
    sbic PIND, SENSOR_A        ; 檢測A點觸發
    rjmp check_B
    cpi phase, 0
    brne check_B
    rcall switch_phase         ; 正向階段檢測到A點

check_B:
    sbic PIND, SENSOR_B        ; 檢測B點觸發
    rjmp main_loop
    cpi phase, 1
    brne main_loop
    rcall switch_phase         ; 反向階段檢測到B點

main_loop:
    rjmp main

switch_phase:
    cpi counter, 0             ; 檢查循環計數器
    breq stop_motor
    dec counter                ; 減少循環計數

    ldi temp, 1
    eor phase, temp            ; 切換相位
    ldi step, 0                ; 重置步驟
    rcall set_motor
    rcall set_timer
    ret

stop_motor:
    cbi MOTOR_PORT, MOTOR_A    ; 停止電機
    cbi MOTOR_PORT, MOTOR_B
    cli                        ; 禁用中斷
LOOP:
    rjmp LOOP

set_motor:
    cpi phase, 0
    breq forward_phase

reverse_phase:
    cpi step, 0
    breq rev_forward
    cpi step, 2
    breq rev_backward
    ret

rev_forward:
    sbi MOTOR_PORT, MOTOR_B    ; 反向階段正轉
    cbi MOTOR_PORT, MOTOR_A
    ret

rev_backward:
    sbi MOTOR_PORT, MOTOR_A    ; 反向階段反轉
    cbi MOTOR_PORT, MOTOR_B
    ret

forward_phase:
    cpi step, 0
    breq fwd_forward
    cpi step, 2
    breq fwd_backward
    ret

fwd_forward:
    sbi MOTOR_PORT, MOTOR_A    ; 正向階段正轉
    cbi MOTOR_PORT, MOTOR_B
    ret

fwd_backward:
    sbi MOTOR_PORT, MOTOR_B    ; 正向階段反轉
    cbi MOTOR_PORT, MOTOR_A
    ret

set_timer:
    cpi step, 0
    breq set_forward_timer
    cpi step, 1
    breq set_stop_timer
    cpi step, 2
    breq set_backward_timer
    ret

set_forward_timer:
    ldi timerH, HIGH(3000)     ; 3秒定時
    ldi timerL, LOW(3000)
    ret

set_stop_timer:
    ldi timerH, HIGH(500)      ; 0.5秒定時
    ldi timerL, LOW(500)
    cbi MOTOR_PORT, MOTOR_A    ; 停止電機
    cbi MOTOR_PORT, MOTOR_B
    ret

set_backward_timer:
    ldi timerH, HIGH(2000)     ; 2秒定時
    ldi timerL, LOW(2000)
    ret

TIMER1_COMPA:
    push temp
    in temp, SREG
    push temp

    sbiw timerH:timerL, 1      ; 遞減定時器
    brne timer_exit

    inc step                   ; 切換步驟
    cpi step, 3
    brlo step_ok
    ldi step, 0                ; 重置步驟循環

step_ok:
    rcall set_motor            ; 更新電機狀態
    rcall set_timer            ; 設置新定時值

timer_exit:
    pop temp
    out SREG, temp
    pop temp
    reti

根據程序畫好電路圖仿真通過!


除了要求用AVRASM還試了WINAVR和bascom avr編程都達到預期的效果。
兄弟們~~這這也太太簡單了么!呵呵~~編程這玩意可以隨便搞了。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:830831 發表于 2025-2-5 18:35 | 只看該作者
自從有了Ai,我基本都是借助ai寫個大概,再自己改改,當然,有些時候ai根本就寫不成,特別是帶精度的
回復

使用道具 舉報

板凳
ID:373976 發表于 2025-2-5 18:59 | 只看該作者
寫代碼我也試過,基本能用,不過啥時候它要是能把電路圖給畫出來就完美了。
回復

使用道具 舉報

地板
ID:299497 發表于 2025-2-7 11:33 | 只看該作者
可以畫電路圖的話就更好了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美日韩精品久久亚洲区 | 久久久蜜桃 | 欧美日韩综合 | 一本色道久久综合亚洲精品高清 | 日韩国产精品一区二区三区 | 五月激情婷婷在线 | 国产中文字幕亚洲 | 色妹子综合网 | 久久er精品 | 一级在线毛片 | 亚洲欧美一区二区三区情侣bbw | 欧美日韩亚洲一区 | 久久精彩视频 | 欧美老妇交乱视频 | 在线视频日韩精品 | 久久神马 | 成人免费一区二区三区牛牛 | 日韩欧美国产一区二区 | 99精品国产一区二区三区 | 欧美激情在线一区二区三区 | 成人免费观看视频 | 成人国产精品久久 | 国产欧美一区二区久久性色99 | 欧美福利在线 | 中文字幕一区在线观看视频 | 伊人一区| 国产精品美女久久久久久免费 | 中文在线视频 | 亚洲一区二区三区在线免费观看 | 色综合一区二区三区 | 免费同性女女aaa免费网站 | 久久免费精品视频 | 久久综合婷婷 | 北条麻妃一区二区三区在线观看 | 综合久久网 | 午夜电影网 | 免费亚洲一区二区 | 精品欧美一区二区中文字幕视频 | 在线看免费的a | 亚洲欧美综合精品另类天天更新 | 羞羞视频在线观看 |