wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

看百度文庫上430的MODBUS程序這個文檔挺多的,可是我發現函數不全,好像不完整,

[復制鏈接]
跳轉到指定樓層
樓主
ID:65446 發表于 2014-9-22 17:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
看百度文庫上這個文檔挺多的,可是我發現函數不全,好像不完整,有人編過430的MODBUS程序嗎,測試通過的,我看過這個程序了,
其中缺少函數,感覺這個不是完整的,有用這個程序試成功過的嗎,歡迎探討
#include "synth.h"
//------------------------------------------------------------------------------
bool CommState;             // 通訊狀態
bool  Request;              // 允許接收
bool  Response;             // 允許發送
bool  EnCommWrite;          // 允許通訊寫
uchar UDRBuf;               // 通訊接收寄存器緩存
uchar CommIndex;            // 通訊索引
uchar CrcLow;               // CRC低字節
uchar CrcHigh;              // CRC高字節
uchar Interval;             // 3.5字符時間間隔
uchar CommWrEntry;          // 通訊寫入口
uchar CommBuf[BUF_SIZE];    // 通訊緩沖區
uint  StartAddr;            // 起始地址
uint RegNum;                // 寄存器數量
int bAudBuf;                // 通訊波特率緩存
int FormBuf;                // 通訊數據格式緩存
extern const StrKeybd Keybd[];
//------------------------------------------------------------------------------
void ResetInterval(void)    // 重置3.5字符時間間隔
{
    switch(bAudBuf)      
    {                  
        case  0: Interval = (uchar)(1000/( 1200/11.0)*3.5/TBASE); break;
        case  1: Interval = (uchar)(1000/( 2400/11.0)*3.5/TBASE); break;
        case  2: Interval = (uchar)(1000/( 4800/11.0)*3.5/TBASE); break;
        default: Interval = (uchar)(1000/( 9600/11.0)*3.5/TBASE); break;
        case  4: Interval = (uchar)(1000/(19200/11.0)*3.5/TBASE); break;      
    }
}
//******************************************************************************
void OpenComm(void)    // 打開或關閉通訊
{
    ResetInterval();
    UCA0CTL1 |= (UCSSEL_2 + UCRXEIE);
    switch(FormBuf)
    {
        default: UCA0CTL0 = UCSPB;         break;  // N-2
        case  1: UCA0CTL0 = UCPEN;         break;  // O-1
        case  2: UCA0CTL0 = UCPEN + UCPAR; break;  // E-1
        case  3: UCA0CTL0 = 0;             break;  // N-1
    }
    switch(bAudBuf)
    {
        case  0: UCA0BR1 = (uint)(BRCLK/1200) >> 8;
                 UCA0BR0 = (uchar)((uint)(BRCLK/1200));
                 UCA0MCTL = (uint)((BRCLK/1200-(uint)(BRCLK/1200))*8)<<1;
                 break;
        case  1: UCA0BR1 = (uint)(BRCLK/2400) >> 8;
                 UCA0BR0 = (uchar)((uint)(BRCLK/2400));
                 UCA0MCTL = (uint)((BRCLK/2400-(uint)(BRCLK/2400))*8)<<1;
                 break;
        case  2: UCA0BR1 = (uint)(BRCLK/4800) >> 8;
                 UCA0BR0 = (uchar)((uint)(BRCLK/4800));
                 UCA0MCTL = (uint)((BRCLK/4800-(uint)(BRCLK/4800))*8)<<1;
                 break;
        default: UCA0BR1 = (uint)(BRCLK/9600) >> 8;
                 UCA0BR0 = (uchar)((uint)(BRCLK/9600));
                 UCA0MCTL = (uint)((BRCLK/9600-(uint)(BRCLK/9600))*8)<<1;
                 break;
        case  4: UCA0BR1 = (uint)(BRCLK/19200) >> 8;
                 UCA0BR0 = (uchar)((uint)(BRCLK/19200));
                 UCA0MCTL = (uint)((BRCLK/19200-(uint)(BRCLK/19200))*8)<<1;
                 break;
    }
    UCA0CTL1 &= ~UCSWRST;
    IE2 |= UCA0RXIE;
}
//******************************************************************************
void Communication(void)    // 通訊
{
    if((SMM.out1 == COMM) || (SMM.out2 == COMM) || (SMM.out3 == COMM))
    {
        if((bAudBuf != SMM.bAud) || (FormBuf != SMM.ForM) || (!CommState))
        {
            bAudBuf = SMM.bAud;
            FormBuf = SMM.ForM;
            UCA0CTL1 = UCSWRST;
            OpenComm();
            CommState = true;
        }
    }
    else
    {
        UCA0CTL1 = UCSWRST;
        CommState = false;
    }
}
//******************************************************************************
void SingleCRC(uchar data)    // 計算單字節CRC校驗碼
{      
    uchar c = CrcLow ^ data;
    CrcLow  = TabCRC[c] ^ CrcHigh;
    CrcHigh = TabCRC[c + 0x100];
}
//******************************************************************************
__monitor void SilentInterval(void)   // 檢測通訊3.5字符時間間隔
{
    if(CommState)
    {
        if(Interval == 0)                  
        {
            ResetInterval();
            CrcLow = 0xFF;
            CrcHigh = 0xFF;
            CommIndex = 0;
            if(Response)
            {
                Response = false;
                IE2 |= UCA0TXIE;
            }
            else
            {
                IE2 &= ~UCA0TXIE;
                Request = true;
            }
        }
        else
            --Interval;
    }
}
//******************************************************************************
bool CheckDataValid(void)    // 檢測寫入數據的有效性
{
    uchar c, index = StartAddr + OFFSET;
    for(c = 0; c < RegNum; ++c, ++index)
    {
        uchar buf = c * 2;
        int data = ((int)CommBuf[7 + buf] << 8) | CommBuf[8 + buf];      
        if((data < Keybd[index].LowerLimit) || (data > Keybd[index].HigherLimit))      
            return(false);                  
    }
    return(true);
}
//******************************************************************************
void GetDataToMenu(void)    // 更新參數值
{
    uchar c, *ta = &SB[(StartAddr + OFFSET) * 2], *src = &CommBuf[8];
    for(c = RegNum; c; --c)
    {                       // 低字節
        *ta = *src;
        ta  += 2; src += 2;
    }
    ta = &SB[(StartAddr + OFFSET) * 2 + 1], src = &CommBuf[7];
    for(c = RegNum; c; --c)
    {                       // 高字節
        *ta = *src;
        ta  += 2; src += 2;
    }
}
//******************************************************************************
void GetDataToBuff(void)    // 取參數值
{
    uchar c, *ta = &CommBuf[4], *src = &SB[(StartAddr + OFFSET) * 2];
    for(c = RegNum; c; --c)
    {                       // 低字節
        *ta = *src;
        ta  += 2; src += 2;
    }
    ta = &CommBuf[3], src = &SB[(StartAddr + OFFSET) * 2 + 1];
    for(c = RegNum; c; --c)
    {                       // 高字節
        *ta = *src;
        ta  += 2; src += 2;
    }
}
//******************************************************************************
void ManageWrite(void)    // 寫指令
{
    uchar c = REGNUM * 2 + 7;    // 指向CRCL
    if(CommIndex < c)
    {
        SingleCRC(UDRBuf);
        CommBuf[CommIndex++] = UDRBuf;
    }
    else if(CommIndex == c)
    {
        if(CrcLow == UDRBuf)
        {
            StartAddr = STARTADDR;
            RegNum = REGNUM;
            ++CommIndex;
        }
        else
            Request = false;
    }
    else
    {
        Request = false;
        if(CrcHigh == UDRBuf)
        {
            if((RegNum >= 1) && (RegNum <= 0x7B) && (CommBuf[6] == (RegNum * 2)))
            {
                if((StartAddr + RegNum) <= COMM_WL_WR)
                {
                    if(!CheckDataValid())
                    {
                        CMD |= 0x80; CommBuf[2] = ERR_DATA;    // 非法數據
                    }
                    else
                    {
                        GetDataToMenu();
                        if(StartAddr < (COMM_WL_WR - 2))
                        {
                            switch(StartAddr+RegNum)
                            {
                                case COMM_WL_WR    : RegNum -= 2; break;
                                case (COMM_WL_WR-1): RegNum -= 1; break;
                                default            :              break;
                            }
                            CommWrEntry = ENTRY;      
                            EnCommWrite = true;
                        }
                    }
                }
                else
                {
                    CMD |= 0x80; CommBuf[2] = ERR_ADDR;    // 非法地址
                }
            }
            else
            {
                CMD |= 0x80; CommBuf[2] = ERR_NUM;    // 非法數量
            }
            Response = true;
        }
    }
}
//******************************************************************************
void ManageRead(void)    // 讀指令
{
    if(CommIndex == 6)
    {
        if(CrcLow == UDRBuf)
        {
            StartAddr = STARTADDR;
            RegNum = REGNUM;
            CommBuf[2] = RegNum * 2;
            ++CommIndex;
        }
        else
            Request = false;
    }
    else
    {
        Request = false;
        if(CrcHigh == UDRBuf)
        {
            if((RegNum >= 1) && (RegNum <= 0x7D))
            {
                if((StartAddr + RegNum) <= COMM_WL_RD)
                    GetDataToBuff();
                else
                {
                    CMD |= 0x80; CommBuf[2] = ERR_ADDR;    // 非法地址
                }
            }
            else
            {
                CMD |= 0x80; CommBuf[2] = ERR_NUM;    // 非法數量
            }
            Response = true;
        }
    }
}
//******************************************************************************
#pragma vector = USCIAB0TX_VECTOR
__interrupt void UART_transmit(void)    // 通訊發送
{
    uchar c;
    TACCTL0 &= ~CCIE;
    IE2 &= ~UCA0TXIE;
    __enable_interrupt();
    ResetInterval();
    if(CMD == READ)                     // 讀指令
        c = CommBuf[2] + 3;             // 指向CRCL
    else if(CMD == WRITE)               // 寫指令
        c = 6;
    else                                // 錯誤的指令
        c = 3;
    if(CommIndex <= (c + 1))
    {      
        if(CommIndex < c)                                                      
        {
            c = CommBuf[CommIndex];
            SingleCRC(c);
            UCA0TXBUF = c;
        }
        else if(CommIndex == c)
            UCA0TXBUF = CrcLow;
        else
            UCA0TXBUF = CrcHigh;
        ++CommIndex;
        __disable_interrupt();
        IE2 |= UCA0TXIE;
        TACCTL0 |= CCIE;
    }
    else
    {
        __disable_interrupt();
        TACCTL0 |= CCIE;
    }
}
//******************************************************************************
#pragma vector = USCIAB0RX_VECTOR
__interrupt void UART_receive(void)    // 通訊接收
{
    UDRBuf = UCA0RXBUF;
    TACCTL0 &= ~CCIE;
    IE2 &= ~UCA0RXIE;
    __enable_interrupt();
    ResetInterval();
    if(Request)
    {
        switch(CommIndex)
        {
            case  0: if(UDRBuf != SMM.Addr)
                     {
                         Request = false;
                         break;
                     }
            case  1:
            case  2:
            case  3:
            case  4:
            case  5: SingleCRC(UDRBuf);
                     CommBuf[CommIndex++] = UDRBuf;
                     break;
            default: if(CMD == READ)           // 讀指令
                         ManageRead();
                     else if(CMD == WRITE)     // 寫指令
                         ManageWrite();
                     else                      // 非法指令
                     {
                         Request = false;
                         CMD |= 0x80; CommBuf[2] = ERR_CMD;
                         Response = true;
                     }
                     break;
        }
    }
    __disable_interrupt();
    IE2 |= UCA0RXIE;
    TACCTL0 |= CCIE;

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
色哟哟免费视频| eeuss网址直达入口| 五月天六月丁香| 美国av一区二区三区| 色婷婷**av毛片一区| 日韩欧美国产免费播放| 国产激情一区二区三区桃花岛亚洲| 91综合精品国产丝袜长腿久久| 成人18在线| 羞羞网站在线| 国产精品玖玖玖| 国产白丝一区二区三区| 91蝌蚪视频在线观看| 麻豆蜜桃91| 国产精品久久久久久久久久三级| 亚洲男人天堂网| 欧美性xxxxx极品少妇| 国产亚洲精品免费| 日本欧洲一区二区| 国产精品久久久乱弄| 深夜日韩欧美| 97天天综合网| 91视频在线观看| 999www成人| 国产精品白浆视频免费观看| 国产激情无套内精对白视频| 久久久久久久黄色| 国产精品无码午夜福利| 国产小视频精品| 99久久99久久精品| 久久亚洲午夜电影| 91亚洲精品久久久久久久久久久久| 啊v视频在线一区二区三区| 精品国产乱码久久| 欧美色成人综合| 亚洲国产中文字幕| 国产精品白丝在线| 99精品久久只有精品| 久久精品国产999大香线蕉| 亚洲成人中文| 888久久久| 国产一区二区三区四区| 欧洲大片精品免费永久看nba| 黄页网站在线| 中文字幕中文字幕在线十八区 | 欧美大片在线看免费观看| 亚洲国产精品悠悠久久琪琪| 欧美日韩国产一级二级| 色伊人久久综合中文字幕| 亚洲第一久久影院| 亚洲狠狠丁香婷婷综合久久久| 久久久综合九色合综国产精品| 国产精品69毛片高清亚洲| 精品无人区卡一卡二卡三乱码免费卡| 国产精品呻吟| 亚洲乱码视频| 一本色道久久综合一区| 激情视频一区| 国产精品女主播一区二区三区| 亚洲国产91| 亚洲精品精选| 亚洲自拍另类| 日韩不卡一二三区| 毛片一区二区三区| 国产美女娇喘av呻吟久久| 激情六月婷婷综合| 国产精品中文字幕日韩精品| 国产精品影音先锋| 国产宾馆实践打屁股91| 播五月开心婷婷综合| 99视频在线精品| 国产欧美日韩麻豆91| 日本一区二区动态图| 日韩美女精品在线| 亚洲成a人在线观看| 高潮白浆女日韩av免费看| 欧美日韩中文字幕日韩欧美| 欧美性生活久久| 在线综合亚洲欧美在线视频| 欧美va亚洲va在线观看蝴蝶网| 亚洲国产精品高清久久久| 亚洲男人天堂视频| 欧美精品日韩三级| 欧美一级大片在线免费观看| 国产精品一二三在线| 国产自摸综合网| 国产呦系列欧美呦日韩呦| 日韩精品久久久免费观看| 日本xxx免费| 亚洲人精品午夜射精日韩| wwwxxx黄色片| 国产一卡二卡三卡四卡| 亚洲黄色网址大全| 国产成人啪精品午夜在线观看| 欧美另类一区二区| 国产女人高潮时对白| 久在线观看福利视频| 色猫咪免费人成网站在线观看| 97超碰在线资源站| 久久精品蜜桃| 丰满诱人av在线播放| 麻豆久久久久| 国产 日韩 欧美 综合 一区| 日韩精品看片| 蜜桃av噜噜一区| 久久久www成人免费毛片麻豆 | 一色屋色费精品视频在线看| 无遮挡又色又刺激的女人视频| 成人蜜桃视频网站网址| 美州a亚洲一视本频v色道| 国内小视频在线看| 超碰精品在线| 91久久中文| 成人高清视频在线| 亚洲一区精品在线| 精品国产91亚洲一区二区三区婷婷| 中文字幕精品视频| 欧美在线视频一区| 欧美视频1区| 别急慢慢来1978如如2| 欧美xxxxx精品| 国产精品theporn动漫| 神宫寺奈绪一区二区三区| 狠狠色噜噜狠狠狠狠8888| 福利视频在线看| 日韩免费在线电影| 欧美日一区二区在线观看| 国产宾馆实践打屁股91| 精品久久久久久久久久国产| 亚洲男女性事视频| 国产精品一区二区久久精品| 亚洲一区二区三区色| 国产美女视频免费看| 天天看片中文字幕| 天天摸夜夜添狠狠添婷婷| heyzo在线观看| av资源中文在线天堂| 性欧美lx╳lx╳| 日本中文字幕不卡| 亚洲一区二区视频在线| 亚洲天堂精品在线| 91手机视频在线观看| 久久久久免费看黄a片app| 性少妇bbw张开| 国产wwwwwww| baoyu777.永久免费视频| 亚洲优女在线| 欧美另类女人| 国产精品免费视频一区| 亚洲高清在线观看| 亚洲综合色激情五月| 国产一区亚洲二区三区| 精品无码久久久久久久| 国产伪娘ts一区| 日本蜜桃在线观看| 国产一区二区三区站长工具| 成人午夜电影久久影院| 欧美人动与zoxxxx乱| 欧洲美女7788成人免费视频| 欧美一级免费在线观看| 国产黄色大片免费看| 不卡av中文字幕| 在线观看视频你懂的| 日本一区影院| 国产美女一区二区| 欧美人妇做爰xxxⅹ性高电影| 欧美一区二区三区免费观看 | 99国内精品久久久久久久| 91日韩一区二区三区| 日韩视频在线观看一区二区| 国产精品国内视频| av网站在线观看不卡| 精品欧美一区二区久久久久 | 亚洲视频网站在线观看| 久久精品国产一区二区三区日韩| 国产精品无码自拍| 丰满岳乱妇国产精品一区| 青青草手机在线| 亚洲人成网www| 久久久蜜桃精品| 国产亚洲精品久久久久动| 欧美日韩国产综合在线| 亚洲最大的黄色网| 中文字幕无乱码| 国产网友自拍视频导航网站在线观看| 国产欧美高清视频在线| 久久免费国产精品| 综合国产在线视频| 日本a在线天堂| 中文字幕一区二区三区精品| 黄色激情网址| 免费视频观看成人| 久久视频免费| 激情五月激情综合网| 欧美一区二区三区免费大片| 国产精品对白刺激久久久| av天堂一区二区| 亚洲成人在线电影| 女囚岛在线观看| 久久字幕精品一区| 3751色影院一区二区三区| 91久久久久久久久久| 免费a v网站| 久久亚洲国产中v天仙www| 九色porny自拍视频在线播放| 久久欧美肥婆一二区| 欧美色图天堂网| 成人免费视频视频在| 人妻av一区二区| 国产精品入口麻豆免费看| 成人香蕉视频| 国产 日韩 欧美大片| 亚洲视频在线视频| www.欧美黄色| 国产精品人人妻人人爽| 大地资源网3页在线观看| 免费在线亚洲欧美| 精品国产不卡| 午夜久久久久久| 国产成人亚洲欧美| 老湿机69福利| 超碰在线12| 黄色成人在线网站| 日韩女优视频免费观看| 在线成人性视频| 在线观看你懂的网站| 三区四区在线视频| 久久精品国产亚洲aⅴ| 国产一区二区三区日韩欧美| 成人一级片网站| 亚洲av成人精品一区二区三区在线播放 | 久久9999久久免费精品国产| 性史性dvd影片农村毛片| 午夜精品一区二区三区国产| 欧美日韩精品一二三区| 亚洲资源在线网| 国产一区二区在线视频观看| 在线播放蜜桃麻豆| 粉嫩av一区二区三区| 色综合色综合久久综合频道88| 天天久久综合网| 人人影院免费大片| 精品国产一区二区三区香蕉沈先生| 一本一道久久a久久精品| 日韩精品一线二线三线| 中文字幕人妻一区二区三区视频| 色呦呦网站在线观看| www..com久久爱| 国产成人97精品免费看片| 中文字幕免费视频| 写真福利理论片在线播放| 国产一区二区三区久久久久久久久| 亚洲欧洲高清在线| 色男人天堂av| 成人免费淫片| 国产麻豆综合| 欧美成人久久久| 瑟瑟视频在线观看| 中文在线√天堂| 极品少妇xxxx精品少妇偷拍| 亚州国产精品久久久| 男人av资源站| 日本精品在线| 久久精品男人的天堂| 99高清视频有精品视频| 色老头在线视频| 日本免费一区二区三区四区| 亚洲九九爱视频| 午夜精品一区二区在线观看 | 精品久久久久久亚洲综合网| 色一情一乱一伦一区二区三区日本| 在线满18网站观看视频| 婷婷亚洲五月色综合| 亚洲色图国产精品| 免费a v网站| 在线观看免费毛片| 国产成人午夜精品影院观看视频| 国产精品成人av性教育| 一区二区三区视频免费看| 女人让男人操自己视频在线观看| 亚洲欧美aⅴ...| 精品综合久久久| 日韩一卡二卡在线| 国产区精品视频在线观看豆花| 欧美怡红院视频| 成人免费播放器| 日日操夜夜爽| 在线看片成人| 韩国欧美亚洲国产| 欧美黄色免费在线观看| 欧美伦理免费在线| 亚洲黄色尤物视频| 色涩成人影视在线播放| 最近中文字幕大全中文字幕免费| 日韩欧美视频| 综合久久五月天| eeuss中文字幕| freexxx性亚洲精品| 一区二区三区四区不卡在线 | 久久精品国产免费观看| 国产麻豆电影在线观看| 国产精品久久人| 国产综合自拍| 欧美激情视频网址| 欧美亚洲精品天堂| 精品自拍视频| 欧美二区三区91| 中国黄色片免费看| 写真福利片hd在线观看| 99v久久综合狠狠综合久久| 国产精品一级久久久| www.黄色一片| 婷婷综合久久| 久久久久久亚洲精品不卡| 国产精品第九页| 136国产福利精品导航网址应用| 欧美一区在线视频| 国产吃瓜黑料一区二区| 国产网站在线播放| 亚洲国产高清在线| 日本男女交配视频| 多人啪嗒啪嗒在线观看免费| 久久一区二区三区超碰国产精品| 国产精品吴梦梦| 国产男男gay体育生白袜| 成人在线免费观看91| 欧美精品18videos性欧美| 国产一级特黄aaa大片| 99综合久久| 日韩精品一二三四区| 美国精品一区二区| 日韩高清在线| 欧美一区永久视频免费观看| 亚洲中文字幕一区| 免费电影网站在线视频观看福利| 黑人巨大精品欧美一区二区免费| 狠狠操狠狠干视频| 一级片在线观看| 亚洲综合视频网| 免费日韩视频在线观看| 在线国产视频观看| 亚洲午夜日本在线观看| 日本高清久久久| 成人在线免费电影| 欧美视频一区二区三区…| 亚洲欧洲日本精品| 麻豆av在线免费看| 欧美视频免费在线| 人妻在线日韩免费视频| 性欧美18xxxhd| 精品久久99ma| 国产在线欧美在线| 香蕉久久夜色精品国产更新时间| 中文字幕欧美日韩在线| 欧美精品二区三区| 免费欧美视频| 国产成人精品一区二区在线| 亚洲综合天堂网| 国产欧美日韩一级| 青娱乐一区二区| 91大神影片| 亚洲男同1069视频| 国产又粗又猛大又黄又爽| 中文字幕中文字幕在线中高清免费版| 欧美性xxxxx| 国产激情在线免费观看| 日韩在线激情| 欧美黑人狂野猛交老妇| av男人天堂av| 三级欧美韩日大片在线看| 免费看成人av| 男男做性免费视频网| 日韩欧美a级成人黄色| 性欧美丰满熟妇xxxx性仙踪林| 国产精品成人**免费视频| 日韩一区二区三区国产| 精品久久久无码中文字幕| 美女精品一区| 欧美日韩一级在线| 免费av网页| 精品美女久久久久久免费| 欧美福利在线视频| 日韩极品少妇| 99re在线视频观看| 久久久久久久久久久久久久久久久久久 | 亚洲一区二区电影| 欧美综合第一页| 伊人免费视频| 亚洲精选在线视频| 亚洲毛片亚洲毛片亚洲毛片| 视频国产一区| 国产精品日韩一区二区| 三上悠亚一区二区三区| 欧美性受xxxx黑人xyx| 青青国产在线观看| 日韩经典一区二区| 免费在线观看毛片网站| 日韩制服一区| 国产精品视频区| 日本三级电影网|